I have a List:
List allStudents = new List();
that contains over 94,000 Student objects, where Student is define
List.BinarySearch is a good solution and works like you would expect. Here's a link that shows a solution similar to what you'll need for the IComparer. Their example doesn't use the Generic IComparer, though.
public class CompareCustomDataType : IComparer {
public int Compare(Student x, Student y)
{
if (x == y) return 0;
if (x == null) return -1;
if (y == null) return 1;
return String.Compare(x.Surname, y.Surname);
}
...
}