Ok, the script has been modified to return the "Top 5" best words to use from the available letters:
( I think this should level the playing fields a little with your file based indexing bokeh )

index.php?letters=czta
Array
(
[0] => act
[1] => cat
[2] => ta
[3] => cz
[4] => ct
)
0.19173002243042
index.php?letters=test
Array
(
[0] => stet
[1] => test
[2] => set
[3] => est
[4] => tt
)
0.17785286903381
index.php?letters=poixaenohb
Array
(
[0] => xenophobia
[1] => neophobia
[2] => hipbone
[3] => phoenix
[4] => phobia
)
0.34027099609375
index.php
PHP Code:
<?php

    $timer   
microtime(true);
    
$letters strtolower(isset($_GET['letters']) ? $_GET['letters'] : 'test');
    
$length  strlen($letters);
    
$words   = array();

    
$handle fopen('en.txt''rb');
    while (!
feof($handle)) {
        
$word trim(fgets($handle));
        
$wlen strlen($word);
        if (
$word && $wlen <= $length) {
            for (
$i 0$a strtolower($word), $b $letters$i $wlen; ++$i) {
                if ((
$j strpos($b$a[$i])) !== false) {$b[$j] = '*';} else {break;}
            }
            if (
$i >= $wlen) {
                
$words[$wlen '.' $word] = $word;
            }
        }
    }
    
fclose($handle);

    
krsort($wordsSORT_NUMERIC);
    
$words array_slice(array_values($words), 05);

    echo 
'<pre>';
    
print_r($words);
    echo (
microtime(true) - $timer);
    echo 
'</pre>';

?>