Такой подход приемлем и типичен.
Это немного расточительно, потому что вы запрашиваете всю запись. Этого нельзя избежать, учитывая сигнатуру метода DeleteOnSubmit.
Почему LINQ to SQL работает таким образом? Ответы очевидны, если вы думаете о таблицах, которые не имеют первичных ключей, или используете составные ключи. Для LINQ to SQL нужна целая запись в худшем случае, когда необходимо сопоставить каждое свойство объекта с полями таблицы.
Но как следует спросить обо всех проблемах производительности - вы абсолютно уверены, что это проблема производительности для вас? Где ваше доказательство профилирования?
Я еще не пробовал, но может быть способ достичь того же с помощью DataContext.ExecuteCommand .