Нет смысла конвертировать выбранные вами элементы в список, если вы все равно перечисляете их с помощью foreach. Также цикл for требует, чтобы вы вызывали ToList, который внутренне использует foreach!
Я не знаю, сможет ли ваш o / r-mapper справиться с Contains
. Если это так, попробуйте это:
var items = db.Requests.Where(x => gridview.SelectedItems.Contains(x.Id));
Это уменьшит количество запросов к базе данных. Здесь время теряется, а не в foreach!