The issue is that you are trying to do a binary search on an array of type Friend to look for a String value. So when your ICompare implementation tries to cast the name to type friend it throws the exception you are seeing. To correctly use the ICompare you would need to create a new temporary friend object to pass into the binary search but just set the name like so:
Array.BinarySearch(friends, new Friend(){ Name = findName });