У меня не было опыта работы с Crystal в течение многих лет (слава богу), но в отсутствие какого-либо другого ответа я бы рассмотрел подход к проблеме под другим углом.
Что я делаю, так это позволяю создавать форму отчета в главном потоке - потому что, как вы сказали, не очень хорошая идея делать VCL в фоновом режиме - но я генерирую весь отчет / данные / в фоновый поток. Как только данные загружены, поток сообщает основную форму (или что-то еще) через сообщение Windows, и отчет отправляется и подключается к набору данных / источнику данных.
Сначала я отображаю пустую метку над клиентской областью окна отчета с сообщением, напоминающим что-то вроде «Загрузка отчета ...», затем, как только сообщение получено, оно скрывает метку и прикрепляет данные. Здесь очень хорошо работает и поддерживает отзывчивость интерфейса.