Great post and great idea. You should have created a blog post about this.
Notice though that implementing IEquatable<T> or overriding Equals() is not something you should do lightly. Only objects that represent a value type (or Value Object in Domain Driven Design) should do that. In fact, ORM frameworks like NHibernate will use Equals() to determine whether two objects represent the same concept, so if you override Equals() you might break the unit-of-work implementation of NHibernate.