Allow immediately to get rid of unnecessary options. You do not want to do # 3 and # 4 - this is not a solution. Magento Enterprise Edition does not add any features that allow you to run multiple customers from the same store.
Now, on the options. As you state, # 1 will allow you to update one version of the code, but, of course, this carries some risks. As far as I understand, should your customers access stores? If you have several clients working in one database and one code base, you always encounter problems that they affect each other. For example, who will control product attributes that are global in nature? If one store removes a product attribute, other stores may lose data as a result. If you solve this problem, then regarding promotion in the catalog and product categories, etc. Magento was created to handle several websites, but not to isolate them from each other, and because of this you will have problems. In terms of performance, a large product catalog or customer base will slow down the site, but you can mitigate this by using a flat product catalog and effectively using caching.
For option # 2, you can run several Magento stores, which causes two main problems. Firstly, as you say, the site is being updated. If you use the Magento vanilla installation and do not modify the kernel files, this should be a non-transition. Magento updater is quite simple for these installations, it is difficult to increase, as you make more mods and must use more manual processes for updating.
In terms of performance, launching multiple purple sites may be slower, but it depends on how you structure them. Regardless of the presence of one or more sites, you will have to upload data for each site, so the size of the database will not differ much. The file size on the server is largely unrelated. In any case, when a client requests a page, Magento must roll out the entire structure to serve the request, as a result of which performance problems begin to appear. One of the big mitigations for this is to use an operation code cache such as Xcache, but with multiple machines you need to provide Xcache with a lot more memory to store the entire installation code. Legitimate problem.
My recommendation? Start with one machine, several installations. Work on the number of installations, and when the server no longer supports, continue. Save code changes outside the kernel and use extensions that can be easily updated, so the updates are simple. This should mitigate as many problems as possible.
Hope this helps!
Thanks Joe