Нет, нет способа создать его без прохождения через каждый элемент.Выражение Linq вычисляется при необходимости, поэтому оно будет проходить через каждую строку (для сопоставления и выбора).
Я думаю, вам следует вместо этого использовать метод DataTable.Select()
( MSDN link )возвращает массив DataRow
объектов, которые вы можете добавить в новую таблицу следующим образом:
var rows = [ORIGINAL DATA TABLE].Select("id>5");
var dtb=[ORIGINAL DATA TABLE].Clone();
foreach(DataRow r in rows)
{
var newRow = dtb.NewRow();
newRow.ItemArray = r.ItemArray;
dtb.Rows.Add(newRow);//I'm doubtful if you need to call this or not
}