Non ti preoccupare, la tua spiegazione è stata molto esauriente, e ho capito perfettamente qual è il problema.

Nel mio caso, il rischio che due thread vengano eseguiti in simultanea e perciò lavorino insieme con la stessa TADOConnection non esiste: ho fatto in modo che, benché la TADOConnection sia una sola e creata in design-time, i thread "secondari" non vengano mai eseguiti insieme. Dunque ci sono massimo due thread attivi: quello principale e uno solo fra i secondari.

Devo dire che piano piano sto imparando a utilizzare i thread e a comprenderne l'utilità, ma una cosa ancora non mi è chiara: l'utilizzo di Synchronize. La documentazione dice:

Synchronize causes the call specified by Method to be executed using the main thread, thereby avoiding multi-thread conflicts. If you are unsure whether a method call is thread-safe, call it from within the Synchronize method to ensure that it executes in the main thread.
Se ho capito bene, Synchronize serve ad eseguire un determinato metodo sul thread principale nonostante lo si lanci da un thread secondario. Ma se il thread principale sta già eseguendo una procedura per conto suo, la interrompe per riprenderla in seguito oppure attende che sia terminata e quindi esegue quanto richiesto dal thread secondario?
In genere per lanciare qualcosa sul thread principale adopero i messaggi.