Вы можете написать сохраненный процесс, который выполняет удаление, и вызвать его из LINQ. Удаление на основе наборов, вероятно, в целом быстрее, но если оно затрагивает слишком много записей, у вас могут возникнуть проблемы с блокировкой, и вам может понадобиться гибрид циклического перебора наборов записей (возможно, 2000 за раз, размер зависит от структуры вашей базы данных, но 2000 - это исходное место, если вы обнаружите, что основанная на множестве дельта занимает так много времени, что это влияет на другое использование таблицы) для удаления.