An alternative (or additional improvement) to would be to implement a cache in the called GetMostDerivedOverride(). When iterating the base types, starting at non-mutable types, the search result could be cached (by type) for the whole inheritance chain, assuming that all super types are non-mutable. See the following sketch.
Regarding order of items in LookUp: Accoridng to http://msdn.microsoft.com/en-us/library/bb534304.aspx
The IGrouping<TKey, TElement> objects are yielded in an order based on the order of the elements in source that produced the first key of each IGrouping<TKey, TElement>. Elements in a grouping are yielded in the order that the elements that produced them appear in source.
ILookUp is based on IGrouping, so the order is preserved.
Doesn't appear to have any effect if is implemented.