I would imagine that if you have non-standard naming of people that you might also encounter non-standard naming of streets. Like people might write Wall St. and Wall Street for street names. Therefore, deciding that your Thompsons have the same address would also be a bit tricky. Maybe not quite as bad as people names, but street names can be badly written, too.
This sort of name management - whether people or streets - is certainly possible in a set of queries. It can also be done in code. But here is a question for you. How many records in this table? It might not be a huge number of people, but it seems that it can be a large number of transactions per person or family. If so, the problem only grows more difficult.
If it is just a few hundred, it might be practical to write some code and expect it to run with reasonable speed. If it is in the over 100,000 range, code will take a long time to run. Worse, having a larger table at least implies a chance of having more different names for people to get wrong. Either way, the amount of time to implement this might be formidable. And doing it by queries would run faster than code, but you would still need a large set of queries for each family of names.
In your original description, you show fields FNAME and LNAME. I can see that folks might abuse those fields by inputting something over and above the intended values of First Name and Last Name - as for example Thompson & Family, You are not going to be able to write ANY query to achieve your desired results until you do some data conditioning. This might require restructuring your table OR creating a parallel table as a staging area. How much flexibility do you have in attacking this problem? I ask because some of our members tell us "I can't change the structure because it comes from an external source" or things like that. Is there a way for you to either modify this table or add a working table?