I have a LINQ Distinct() statement that uses my own custom comparer, like this:
class MyComparer : IEqualityComparer where T : MyType
{
It's unfortunate that Distinct doesn't come up with such an overload, so what you have is a good option.
With MoreLinq, you can use the DistinctBy operator.
var distincts = bundle.GetAllThings.DistinctBy(a => a.Id);
You might also want to consider writing a generic ProjectionEqualityComparer that can turn the appropriate delegate into an IEqualityComparer implementation, such as the one listed here.