Vergleich auf Gleicheit (oder Ungleichheit) sollte bei einfachen Typen ja immer gehen. SizeOf(T) und dann schauen ob da die gleiche Byte-Folge steht sollte ja grundsätzlich kein Problem darstellen.
Genau das macht ja der Default-Equality-Comparer. Ist aber wirklich nicht unbedingt was man haben will. Hast du bspw. zwei Float-Werte, betrachtest du die in der Regel als gleichwertig, wenn sie auf den ersten x Nachkommastellen gleich sind. Oder bei einem Record - Da reicht es schon, wenn die unsichtbaren "Padding"-Bytes zwischen Feldern unterschiedlich sind. Oder zwei unterschiedliche Strings, aber mit gleichem Inhalt. Oder...