Не давать воркерам имена — это и есть самый лучший выход из ситуации, особенно учитывая, что по умолчанию потокам в VS-дебаггере присваиваются имена вида <имя модуля>!<имя функции потока>. Если используется одна и та же функция для нескольких потоков, которые нужно различать — можно сделать шаблонную функцию-обертку и различать по шаблонным параметрам.
Извините, если я тупой, но я не понял, почему производительность падает, за счёт того, что вызывается исключение? Я нагуглил один тред, где говорится о том, что это поведение должны были исправить. Или я не прав и не то нашёл?
В ThreadPool они вряд ли создаются и удаляются постоянно. На то он и ThreadPool — создает один раз фискированное количество и ставит их в состояние ожидания, иначе смысла в нем нет.
Не давайте имена потокам из ThreadPool при отладке в VS