Hi Chad
First off, for the moment at least, I don't want a refund, because I do think this is a great product with some nice features. It just needs a quick fix.
I'll answer your questions first:
In your example I am assuming 'HomeAddress' is a search field setup correct? Correct, there are 2 fields set up, surname and homeaddress, surname is a standard field and homeaddress is a custom profile field.
So the search field is setup but the user does not enter anything. Because of this it should return (unless I am wrong) the results for 'Reid' as the other search term but its causing a problem because the user never entered a home address and therefore its null? Correct, it is null because DNN does not create the field record for an empty field. And you have just answered your own question, the fact that it is null, not empty is the problem.
Your query that is created is this: Surname = 'Reid' and HomeAddress = '' whereas what should be created is Surname = 'Reid' and (HomeAddress = '' or IsNull(HomeAddress), obviously thats not the full query with left joins but if you are going to include search terms that have no value you should allow for nulls.
Hmmm.... was the HomeAddress field added after Reid updated their profile? I am wondering if a simple work around would be to update the database one time if a new field is added. No, it is per user, not per field which would mean you would have to run an append query to add null fields as "" to the database whenever a new user is added. Which is also bad because it would waste space in large databases.
otherwise you might end up getting results you wouldn't want if we changed this. Or... If nothing is entered possibly skip the search but if we implemented this it should be an option because not all users would want this (some users might want it to just be contains?). hehe, I only want to use contains and whilst I used equals in my example about I only ever tested with contains, the fact is that even if you say HomeAddress contains '%%' it still won't return records with nulls because a null can't contain %%