I don't necessarily see this as a better idea, but possibly an alternative. Do the 5 digit search first and if not found then build a 5 digit list of first 3 digit matches. Why? Divide an conqueor. Then parse the 3 digit match list for 4 and 2 digit matches at the same time. When you get to the end, you now have a list of 2, 3 and 4 digit matches (if there were any). Another approach would be to do this sort of thing in a single pass and match 2 - 5 digits and find the closest match from those. It's a trade off between speed (going to take longer to do all the possibilities at once) versus the odds that someone will enter number that has zero or few (1-2) beginning matches. I'm sure somebody else will have a better answer for you, so take this for what you will.