Perché non creare semplicemente un database o ogni azienda? E poi non hai nemmeno bisogno di costruire nomi di tabelle dinamici quando costruisci le tue query. È una soluzione molto più valida. Inoltre, renderà i dati dei clienti più separati, quindi qualsiasi interdipendenza sarà probabilmente più ovvia.
Quanto sopra funziona meglio quando anche i livelli dell'applicazione sono separati in modo da poter fornire a ciascuna istanza un diverso insieme di credenziali di accesso al database.
In caso contrario, potrebbe funzionare correttamente, essere scomodo o andare bene a seconda della tua installazione, della piattaforma che stai utilizzando e così via.
Aggiungere il nome di un'azienda è un trucco, ma credo che possa essere fatto funzionare.
Anche avere un ID cliente nei record è un approccio comune. Non mi preoccuperei necessariamente di 1,5 milioni di record dal punto di vista delle prestazioni purché le tabelle siano indicizzate in modo appropriato. Non si tratta di un'enorme quantità di record. Inoltre, i criteri dell'ID azienda dovrebbero comunque limitare i risultati abbastanza bene.