Ho avuto un problema simile per i dati dell'indirizzo una volta, la nostra soluzione era creare una singola colonna contenente tutti i dati ricercabili.
Scoprirai che l'indicizzazione di tutte le diverse colonne su cui vuoi effettuare la ricerca aumenterà notevolmente le dimensioni del tuo DB. In questo modo si riduce questo perché hai solo un indice di ricerca, anche se duplica i dati in una colonna di ricerca "disordinata". Tuttavia, ti consente di utilizzare le ricerche fuzzy sui dati, ad esempio memorizzi i nomi come valori soundex (o doppio-metaphone) e cerca quelli anziché il nome completo se i tuoi utenti hanno difficoltà a scriverli con precisione.
Potresti voler modificare i tuoi dati con alcuni prefissi (ad esempio, gli SSN potrebbero essere preceduti dal token 'SSN' o un delimitatore di token prima e dopo) e gli spazi dovranno essere rimossi o sostituiti, sebbene YMMV.
Dovrai gestire i dati della colonna man mano che gli utenti vengono creati o aggiornati, il che potrebbe essere troppo difficile - per noi dovevamo farlo solo durante la creazione. Dovrai anche gestire gli spazi, ma potresti non farlo, se vuoi cercare cognomi e cognomi senza nomi intermedi.
Stai duplicando i dati creando una tale "colonna di ricerca" speciale con questo approccio, ma ha funzionato molto bene. In alternativa puoi guardare alla creazione di un singolo indice da più colonne (alcuni DB consentono questo con funzionalità come l'indicizzazione della ricerca a testo libero) e semplicemente la ricerca invece.