Non penso sia necessario.
Fare la rotta dello spazio dei nomi che hai menzionato (per i modelli in directory separate) è quello che farei.
Vorrei inoltre analizzare ulteriormente il problema delle prestazioni correnti.
Solo avere 150 modelli / tabelle non dovrebbe causare più di una frazione di secondo per essere in grado di trovare e utilizzare il modello! In realtà è la query db stessa che richiede molto tempo (quando non viene memorizzata nella cache)? Ciò può essere risolto in molti modi (suddivisione dei dati, aggregazione dei dati, aggiunta di indici, modifica delle query per renderli più performanti, ecc.
Potresti o meno dover fare controllori e viste in directory separate.
Per accedere alle cose organizzate in questo modo, devi solo utilizzare ::
, ad es. se metti molti modelli di camere da letto e solai, seminterrati, ecc. in una sottodirectory "edifici" e poi vuoi accedervi nel controller, usa ::
, ad es. attics = Buildings :: Attic.all