Только для рассмотрения решения, которое создает новый список со списком старый , вы можете сделать это:
var newList = old.Where((_, i) => i%2 != 0).ToList();
или, очевидно,
var newList = l.Where((_, i) => i%2 == 0).ToList();
в зависимости от выбора чередования.
EDIT
Ответ немного быстрее. Если вы читаете здесь что-то еще, это потому, что я измерил на выходных, а мозг выходного дня смешной. :(
Закрывающее решение примерно на 40% быстрее, пока ответ - приложение. На 2 порядка быстрее. Я полагаю, это будет зависеть от того, насколько большим станет ваш список!