Можно ли сравнивать через переопределенный GetHashCode() в C#?
GetHashCode - это не про сравнение, а про генерацию хэша для объекта.
Хэши могут пересекаться, тк количество хэшэй принципиально меньше количества уникальных объектов.
По тому, если тебе нужно ответить на вопрос "равен ли объект А объекту Б", то обязательно нужно проверить на Equals.
Чтобы при разных типах у тебя не было ложного совпадения - просто сравнивай ещё и тип в Equals (через GetType)

Если тебе нужно сравнить объекты по принципу больше/меньше/равно, то тут к тебе на помощь приходит интерфейс IComparable.
Одинаковый хешкод не гарантирует равенство объектов. А так, в своём коде вы вольны делать что угодно, хоть сравнивать только по одному полю.