From a historical use of data mining against a claims adjudication system and having to deal with diagnosis / procedure codes, you might want to switch to a combination of controls. First, I would have a grid (allows more than 1 or 2 diagnosis, so your not stuck there and having to redesign a form if more are ever needed) of Entered Diagnosis Codes. Above it (or below), have a textbox.
If the users have some documentation they are entering from and have the codes right there, allow them to free-entry into the textbox. During the validation of the textbox, query your table of valid codes and get the code and description to populate in your grid above if only 1 entry found. If more than 1, display a popup window with a grid of the choices that matched your query and allow them to pick from THAT. Any such chosen would be added to your primary grid display. If NO Entries are found, that could be from a type-o, or a code that just doesn't exist. I would then strip back the string until you queried and DID receive some result. Then, like previously stated, call the secondary form to pick from available diagnosis codes. Ex: if Diag code "12345" can't be found, look for "1234", "123", "12", "1" until SOMETHING comes back with a result.
Additionally, for the querying, if the text is determined to be numeric, query based on the code. If alpha, query on the description... Either way, a result set could be displayed of what IS found instead of stumbling through a list of non-applicable items.