I have a List:
List allStudents = new List();
that contains over 94,000 Student objects, where Student is define
With that many entries you would probably be better off using a Dictionary lookup, which would be amortized O(1). Although there could probably be multiple Students with the same surname, so it would have be something like Dictionary
Also as Amit pointed out, using a binary search when there are duplicate items can be tricky, because you don't know which index you will get in the series of duplicates. You would have to search to the left and right of the returned index to see if any other matching surnames exist.