Hola.
Si tienes problemas con dbExpress, utiliza el driver de Upscene en lugar del de Borland. (Es específico para Firebird, en cambio Borland no tiene ningún interés en que su driver sea compatible con Firebird, por lo que es muy probable que no soporte las nuevas caracteristicas).
http://www.upscene.com/dbx_fb/dbx_fb.htm
Respecto a los componentes. Es correcto lo que imaginas. Tienes que sustituir el IBDatabase por un SQLConnection, y cada IBDataset por la tripleta : SQLQuery + DatasetProvider + ClientDataset.
Respecto a ponerlos en el datamodule o en el formulario, puedes seguir la misma política que hacias con los IBDatasets. (Aunque si tenias los IBDatasets en los formularios, podrias poner los DatasetsProvidres y SQLQuerys en el datamodule, y dejar unicamente los Clientdatasets en los formularios).
Las transacciones son implicitas. Cuando abres un clientdataset, el DatasetProvider correspondiente hace la solicitud al SQLQuery, este abre una transacción, recoge todos los datos y los pasa al clientdataset, y cierra automaticamente la transacción. De la misma forma, cuando guardes los cambios del ClientDataset, este los pasará al DatasetProvider que los enviará directamente a la SQLConnection, esta abrirá una transacción y ejecutará directamente las sentencias INSERT y UPDATE para realizar los cambios solicitudas, cerrando a continuación la transacción.
Por lo que nunca se mantendrán transacciones abiertas. Si quieres tener una transacción abierta, lo tienes que hacer manualmente con un BeginTrans sobre el SQLConnection (aunque normalmente no es necesario usarlas demasiado).
Sobre los datos que se cargan al abrir un clientdataset, como se deduce de lo explicado anteriormente, el SQLQuery carga todos los datos en el ClientDataset (y no unicamente los que se van a ver en la grid actual).
Finalmente, los campos persistentes se tienen que agregar, y primero se hace en el SQLQuery y después en el ClientDataset.
NOTA : Si necesitas unos datos para mostrarlos en una grid, hacer un informe, .... pero no vas a modificarlos, puedes usar un SQLClientDataset (en Delphi 6) o SimpleDataset (en Delphi7). Que es un componente que integra a los 3 habituales : SQLQuery + DatasetProvider + ClientDataset. (Esto no es recomendable si vas a modificar los datos, debido a varias razones, entre ellas que no puedes especificar los campos de clave primaria, por lo que será dificil que se generen correctamente las sentencias UPDATE para actualizar cambios).
NOTA : Respecto a lo que te han comentado, es para realizar una aplicación de 3 niveles, con un servidor de aplicaciones corriendo en un ordenador separado. El cual contiene los SQLQuerys y DatasetsProviders. En la aplicación cliente, solo necesitas los ClientDatasets, que se conectan a los otros dos en el datamodule remoto. Las unicas correcciones a lo que te han dicho, es que mejor utiliza un SQLQuery, y las conexiones SOAT no existen, así que imagino que debe referirse a SOAP. Personalmente nunca utilizo aplicaciones de 3 capas, pero ciertamente es una buena idea si la aplicación tiene que soportar muchos clientes.
Saludos.