This does not apply to DbExpress (with which I have no experience), but the best idea for moving some functionality to the background thread is to first develop it in the main thread, debug it, and as soon as you make sure it is fine, then move it.
What you can do is put everything on the TDataModule. If the data module can work on its own, without needing any other components in other forms or data modules, and you create it in the background thread, then you can be sure that everything will work. You do not need to clone the connection, as it will be created and destroyed in the same thread where all access to the database will be performed.
Some important tips for working with databases:
, / . Application .
. , TDataSource , .
SendMessage PostMessage, .
OLE, OleInitialize() OleUnitialize() .
, OmniThreadLibrary AsyncCalls. , , .