It sounds like you're looking for Phonetic Analysis, which can be used to create new tokens that represent what the original tokens sounds like.
I created a runnable example with your example data here, which shows a search for "Dan Smi" matching the first and last name fields using a double metaphone filter.
The github page of the Phonetic Analysis plugin contains the name of all the other implemented phonetic token filters that you might want to try out as well.