If it was me, I'd do a scan loop instead of a query.
First you have to make the name field a bit larger to handle the added name(s).
Then query the allAddress table to produce an unkeyed copy of it (answer.db). Sort answer.db on the address field, then key ID number (obviously you might want to check the city and zip too, but we're doing a simple version).
Now you have a sorted table, ordered to have duplicate addresses grouped together with the (normally) keyed field descending. Now you need to identify duplicates and update the real table.
For this you simply open both tables with tCursors, and do a scan of the sorted answer table. When an address matches that of a previous record (use a variable placeholder), locate the previous record's key value in the real table and modify that record's name field to add "or so-and-so". Blank the name field on the duplicate record of the answer table (so you can do a delete query in a moment). Once the scan is complete, the real table will still have duplicate address records, but the primary record for that address with include all the names. Then do a joined delete query, linking the real table (as DELETE) and answer table on the key field and using the reserved word BLANK in the name field of the answer table.
All the records you blanked the address field on in the answer table will be removed from the real table, leaving you with only single records for each address.
If you need help with the code let me know.