Let's play countdown! For those of you who have seen the popular daytime TV show Countdown, you will know that the contestants are given 9 randomly selected letters and must then find the longest word they can in 30 seconds.
Your challenge is, given a string of 9 letters, to find the longest word that is an anagram of the largest subset of input letters, this means that you don't have to use all of the letters in the input string.
Input/output can be stdin/stdout, or whatever the equivalent in your language is.
Rules

Input will always a 9 letter string, all lower-case
You can use as few or as many of the letters from the input string
A word is allowed if it is found in the specified dictionary file, the dictionary file containing all the allowed words can be found here (note: I didn't compile this, credit goes to the github uploader). The file is is a .txt file which contains ~101,000 words with each word on a new line - approx 985kB.
You must use the dictionary file specified above, this is to ensure that all fairness across all the entries, e.g. so everyone has the same chance of finding the longest word.
You are allowed to manipulate the dictionary file in such a way that none of the words are edited in any way and no new ones are added, for example copying all the words to an array, making all words comma separated or copying the whole contents of the file to another file would be allowed.
Inputs may contain any number of vowels and consonants, e.g. 9 vowels or 8 consonants and 1 vowel
If there are multiple words with the same length, then you must output all of them (up to a limit of 5 - to prevent long lists of 5/6 letter words). Multiple words must be delimited, but this can be done in any way - comma, space etc.

Test Cases
Input: mhdexaspo
Output: hexapods, mopheads
Input: iesretmng
Output: regiments
Input: cmilensua
Output: masculine calumnies
Input: floiufhyp
Output: huffily puffily
Input: frtuasmjg
Output: frusta,jurats,jumars,tragus,grafts
This is code-golf, so shortest code wins!
CJam, 51 bytes

Laeas$W%{1$f++}/:A;qN/{$aA&amp;},{,~}$5&lt;_0=,:L;{,L=},S*


CJam has no file I/O, so I opted to read the dictionary (converted to Unix format) from STDIN and read the string of letters as a command-line argument.

Test cases

$ for w in mhdexaspo iesretmng cmilensua floiufhyp frtuasmjg
&gt; do cjam countdown.cjam $w &lt; dictionary.txt
&gt; echo
&gt; done
hexapods mopheads
regiments
calumnies masculine
huffily puffily
frusta gamuts grafts jumars jurats


How it works

La        " Push T := [ '' ].                                                         ";
eas       " Push the command-line argument (R) as a string.                           ";
$W%       " Sort its letters, then reverse.                                           ";
{1$f++}/  " Iterate over the letters; prepend them to copies of the strings in T.     ";
:A;       " Save in A and discard. A contains all sorted substrings of R.             ";
qN/       " Read from STDIN and split at linefeeds.                                   ";
{$aA&amp;},   " Filter; keep dictionary words D such that {sort(D)} ∩ A ≠ ∅.              ";
{,~}$     " Sort by negated word length.                                              ";
5&lt;        " Keep only the first five words.                                           ";
_0=,:L;   " Save the length of the first in L.                                        ";
{,L=},    " Filter; keep dictionary words D such that len(D) = L.                     ";
 S*       " Separate by spaces.                                                       ";