You should generally run any slow process in a separate background job process - and lots of DB activities certainly qualifies.
This allows you to also insert other actions in the job later if you discover you want to add hooks for tasks always run before or after the big job.
Batch your DB activities too for performance and you're absolutely going in the right direction.
Id use the observer pattern to call a schedule_for_destruction job and then have that send the appropriate info to the job queue.