アドバイスありがとうございます!もしそれらのトピックを完全に削除することにした場合は、SQL クエリで deleted_at と visible=false を設定します。その後、30 日後に Sidekiq ジョブによってそれらのトピックが削除されます。
しかし、それらのトピックを保持する必要がある場合は、ご提案いただいた通り、topic.delete を使用する小さな Ruby スニペットで「削除」処理を行います。
どちらの場合でも、最終的には Discourse 自体がそれらのトピックを処理するため、依存関係の問題も適切に処理されるはずです。
大変ありがとうございました!