In my UK tool, I’ve only come across a few brands that I need to treat specially, e.g. to ignore certain types of objects that I’m not interested in. (My tool also treats multiple OSM objects that have the same website as being a single branch for the matching. So that allows you to not see e.g. a petrol station attached to a Tesco store as an unmatched OSM object.) There are a few ATP sets where I need to do some processing to change some of the brand:wikidata values to more specific sub-brands, but that’s not too bad.
There are a lots of cases where the branches in OSM do not have consistent amenity=* or shop=* tags and names=* values though - so I’m a bit surprised that matching on them is working so well for you. Perhaps if you had a single big table of sets of “similar” shop/amenity values then that would work with the way you’re doing it. I still think matching with the brand:wikidata values (possibly in addition to other criteria) is the best way to go. If you’re not worried about unmatched OSM objects, then I’d have though you could simply consider anything in OSM with a matching brand:wikidata in addition to the shop/amenity tags you’re already searching on to improve things. (Surely that would allow you to pick up some of the examples I gave of your tool missing matches to OSM objects.)
In terms of possible shop/amenity values for each ATP set, you could try looking at the tagging of existing OSM objects with the right brand:wikidata values. Anything that appears more than once or twice would probably be a good candidate to match on. See the different values for Dunelm at https://osm.mathmos.net/chains/Q5315020/
What I do with the postcodes is use them as a secondary signal for the matching. If there’s a matching postcode then I allow a match over a greater distance (currently infinite). This only gets me into trouble very occasionally if there’s more than one branch of a chain with the same postcode. You could do something similar with website=* matches. It might be dangerous to allow matches on the website over too large a distance though, since someone might have added the wrong website to OSM. At least with UK postcodes, there’s open data on their locations, and I have another tool that flags any addr:postcode=* values that seem to be mis-located.