A mio modo di vedere la tua terza soluzione, ovvero avere un pannello distinto per ogni classe, e avere un JTabbedPane con 5 tab, con un pannello per tab, è la soluzione migliore, e direi anche la più semplice.
Con 5 applicazioni quello che andresti a fare (se ho capito bene quello che intendi), sarebbe comunque avere un singolo pannello, modellato da una tua classe, che carica all'interno una delle tabelle e fornisce bottoni o componenti vari per interagire con questa tabella.
Una volta che hai inglobato tutto questo all'interno di una classe che estende JPanel (parlo dei componenti, poi dovrai comunque avere una buona separazione tra componenti grafici e "modelli" dei dati), tra aggiungere il pannello a un JFrame e scrivere un main che semplicemente rende il frame visibile (questo separatamente per ognuna delle 5 applicazioni), o aggiungere ogni pannello dentro un tab della JTabbedPane, con l'aggiunta di un solo pannello che racchiude il JTabbedPane e viene aggiunto a un frame "unico", la differenza è minima.
Non credo neanche che sarebbe "pesante" da gestire, se non aggiungi centinaia di componenti per ogni tab dovresti avere comunque un'applicazione fluida, sempre che eventuali lavori fatti sul database non blocchino il thread principale, ma questo varrebbe in ogni caso.
Questo è il mio parere, poi se ho capito male lo scenario di riferimento correggimi pure.