Selection from long lists

To capture in-migration from within our area, we want to be able to choose the individual’s name (From data from a previous survey). This list is large (1,00,000+ individuals). Although multiple smaller lists can be created based on village.

Our current solution (crude): We have multiple forms. Location A to Location X, Location B to Location X and so on. If the migrant is from Location A, the interviewer will choose the specific form (Location A to Location X which will have the filtered list of individuals only from Location A) and fill in the details.

Is there a more elegant way to doing this? Our objective is to collapse these form in 1 form. How can I allow selection of a individual from a list of 1,00,000+ within a single form (within these limits, ofcourse)?

This is what we did.

We broke down the list in village wise lists and uploaded them as categories (~100 lists/categories) with parentid set to the village. Then we created a question for each list (~100 questions!) with an enabling criteria == village code. Now if a village is selected, only the question corresponding to that village will be unhidden, displaying the list of individuals from that village only.

The form compiles and runs on the server. The only issue I see - when we open the section where these questions are placed, there is a short delay in opening the form.

Thoughts? Was this the right way to do it?