Я не уверен, как бы вы написали это в LINQ, но я полагаю, что бинарный поиск может быть быстрее таким образом - начиная с середины, сравнивая индекс со значением - если они равны, продолжайте в правой половине, в противном случае в левой половине и т. д.
Даже если вы начинаете с индекса start_index , который не равен 1, вы можете просто сравнить значение с индексом, увеличенным на start_index .