Both work, hopefully by 'better practice' you mean faster, more robust and the most scalable. If there will be increasing amounts of data then at some point the single table will become unusable.
>>His point is that creating tables on the fly is a bad idea.
Why? If you are creating them all the time, then I agree it could be but if it is only once in a while I don't see any issue.
>> Tables will only be created once when a new site is added.
How often is that?
>> He wants the db set up from the begining and no new tables are ever created.
Unrealistic, at some point you are going to have to create a new table.
>> if we need a new server then we will be making so much money it won't matter.
This approach is true to a point. You can't be lazy and create bad structures and lazy code just because you can throw hardware at it later. The key is to minimize costs and create a program/db that is scalable and powerful which will give the present setup a longer lifespan.
Though at some point even a perfectly designed system needs hardware thrown at it, hopefully. ;)