20,000 * 20,000 is 400,000,000. If the average lookup finds a match after looking through half the records, that's 200,000,000 records looked at during the FormulaFill. That could take awhile. The Wrap option in the SuperLookup( function exists for just this reason. If you sort the item field and then
It won't be starting each search from the top, but rather from the record where it last found a match.
If you are doing the lookup from another database, you would want to sort both item fields before doing the FormulaFill.