OK there are a couple of options for you. Obviously business name matching won't work, spatial joins will be unreliable, and address formatting isn't the same. One possible solution could be rubber sheeting (http://desktop.arcgis.com/en/arcmap/10.3/manage-data/editing-existing-features/about-spatial-adjustment-rubbersheeting.htm). Rubber sheeting is effectively georeferencing for vector datasets. This methodology kind of assumes that the relative locations of the points (in relation to one another) is the same; if this is not the case you might be able to get them close enough to one another to make a spatial join work.
An alternative would be to georeference the addresses for both datasets using the same service, as this would likely assign the same XY locations to each. If you were able to do this, you could write your XY locations to the attribute table and create an XY Event Layer from those values, or round the XY coordinates to 4 or 5 decimal places (if you're using a geographic coordinate system in decimal degrees, this would be accurate to within approximately 11 or 1.1 meter respectively) and perform a table join on the XY values (I'm assuming that's your goal).
I will update my answer later with an example of how you could accomplish the georeferencing.