есть идеи по поводу BGW для длительной эксплуатации?
Да, это так :). Нет ничего плохого в том, чтобы иметь длительные операции в BackgroundWorker или ThreadPool ... если в коде есть взаимоблокировки из-за длительных операций, значит что-то не так с кодом.
Предложение: разрешите вашу операцию отменить. BGW позволяет сделать это, установив свойство bool. Вам необходимо периодически проверять это свойство в методе DoWork.