Se l'unico "problema" è il CAST .. puoi ovviare come ha detto Caiodark dichiarando la variabile di tipo TDataSet, ma pensandoci anche TDataSource, e con una funzione incapsuli il tutto in modo da ritornare il collegamento al server desiderato.
Altra strada sarebbe usare gli "Anonymous Methods" o le interfacce (TInterfacedObject) con le nuove classi generics, le hai a disposizione da D2009 in avanti, ci vuole un po' di studio ma credo sia fattibile, anche se la strada della funzione che in base ai parametri passati ti ritorna un TDatasource già bello e pronto non sarebbe malvagia
Un Saluto
N.