Non mi è chiarissimo quali siano le parti chiare, e quali no.
Considera che non c'è una risposta "giusta", ci sono tanti approcci validi o meno a seconda delle circostanze

1) creare una tabella payload separata, con una chiave che viene collegata al record principale. la tabella payload è diversa per ogni variante del programma
Esempio: tabella clienti nel db1, ci metti dentro un campo IDLINK.
Crei una tabella payload (nel db1) che ha il campo IDLINK come chiave, e tanti bei campi specifici (che ne so codice IBAN)

Nella tabella payload (del db2) ci metti campi diversi (peso, altezza)

Non alteri quindi la tabella "madre" clienti (il che può portare 10000 problemi, a partire da backup e restore), bensì una tabella specifica, separata, joinata 1-1

Lato applicazione il programma "sa" che la "roba" dentro la tabella payload va ricostruita dinamicamente.

Ad esempio se vuoi farne vedere il contenuto al cliente, prima enumeri i campi che la compongono (dinamicamente), poi formatti i risultati, poi li mostri.

Questo allevia il carico di lavoro di programmazione nel dover rendere dinamiche le tabelle "standard".

Traduzione: mentre in una tabella "standard" puoi fare qualcosa tipo
select cognome from clienti..., perchè SAI che il campo cognome esisterà, in una tabella dinamica (payload) no, non puoi farla.

Puoi farla dopo che hai verificato se il campo X c'è

2) predisponi una tabella "generica" nei quali campi inserisci anche... il nome del campo stesso

quindi una tabella clienti (id_cliente,nome_cliente)
una tabella campi(id_campo,nome_campo,valore_campo)
qualcosa del genere
3) adotti una strategia per la gestione di campi aggiuntivi, tipo metterci un prefisso (jitcampospecialedelcliente1, jitcampospecialedelcliente2) e così via
Questa è la variante di modificare la tabella clienti.
Dentro avrai (parte statica)... poi (campi aggiunti).
Per distinguere i campi aggiunti uso un prefisso, sicchè (lato programma) posso capire quali sono i campi standard, e quali quelli specifici del cliente.

Come detto, in generale, non ti suggerisco questa soluzione (avere tabelle basi diverse)

una tabella unica
clienti (id_cliente, nome_cliente, campi_aggiuntivi)
ed i campi aggiuntivi tipo separati da qualcosa (emailrova@ciccio.it,partita_iva:555555)
Questi sono normalmente i "tag", io uso proprio
email=prova@ciccio.it;partita_iva=55555;
Qui però perdi la possibilità di fare ricerche rapide, diventano lentissime a causa di fullscan necessarie per le ricerche.
Dipende se la cosa ti interessa, oppure no.

mi sa che la cosa più semplice/pulita è quella di alterare la tabella...tanto lo farà soltanto l'amministratore...metterò un paio di avvisi...
Personalmente te lo sconsiglio. Diventa facilmente un vero e proprio incubo quando devi fare i restore (che diventano specifici per il cliente), nonchè per le applicazioni etc.