Excelente, fico feliz em saber que isso resolveu o seu problema. Para fins de combinação das respostas, pode-se usar o seguinte no console do Rails para excluir todos os tópicos que foram excluídos há mais de 90 dias, repetindo quantas vezes forem necessárias se houver mais de 1000 tópicos:
Topic.with_deleted.where(deleted_at: ...90.days.ago).limit(1000).destroy_all
Após a conclusão disso, o seguinte pode ser usado para excluir todas as postagens órfãs de tópicos excluídos:
Post.find_by_sql("select * from posts where topic_id not in (select id from topics)").each { |p| p.destroy }
Vale notar que os comandos acima não excluirão postagens excluídas, apenas tópicos excluídos e suas postagens órfãs. Para também excluir postagens excluídas com mais de 90 dias, use o seguinte, novamente repetindo conforme necessário:
Post.with_deleted.where(deleted_at: ...90.days.ago).limit(1000).destroy_all
P.S. Por curiosidade, você tentou destroy_all sem limit(1000) e teve problemas ou não tentou sem o limite?