Pourquoi ne pas simplement créer une base de données ou chaque entreprise ? Et puis vous n'avez même pas besoin de construire des noms de table dynamiques lors de la construction de vos requêtes. C'est une solution beaucoup plus solide. De plus, cela séparera davantage les données des clients, de sorte que toute interdépendance sera probablement plus évidente.
Ce qui précède fonctionne mieux lorsque les couches d'application sont également séparées afin que vous puissiez fournir à chaque instance un ensemble différent d'informations d'identification de connexion à la base de données.
Si ce n'est pas le cas, cela peut fonctionner correctement ou être gênant ou correct selon votre installation, la plate-forme que vous utilisez, etc.
Ajouter un nom d'entreprise est un hack, mais je suppose que cela peut fonctionner.
Avoir un ID client dans les dossiers est également une approche courante. Je ne m'inquiéterais pas nécessairement d'environ 1,5 million d'enregistrements du point de vue des performances tant que les tables sont correctement indexées. Ce n'est pas une énorme quantité d'enregistrements. De plus, les critères d'identification de l'entreprise devraient limiter assez bien les résultats de toute façon.