There is nothing wrong with starting with a geocode field to maybe fill in a few blanks. But you can skip that step if you really want.
Essentially, Id just add separate fields for all the address components. (I would assume that your multi-tenant commercial buildings have unit/suite numbers...)
Here is an example that I use for our radon team. Now, our radon team works anywhere from down-town in large cities to super remote northern territories. aka, the geocoder doesn't always work. But as I mentioned, it's a good starting point:
The user starts by searching for the property in the geocode field. Hopefully they find it and it fills in all the other fields via pulldata(). If that's the case, job done! But, they can also tweak all of the separate address fields as-needed. In the end, I pull all the address data from those separate fields and not the geocode field: