Comparer that compares by int than by enum type
private static readonly List&lt;RegionType&gt; sortOrderByType = new List&lt;RegionType&gt;
{
    RegionType.DeletionBeforeNamedRegion,
    RegionType.NamedRegion,
    RegionType.DeletionWithinNamedRegion,
    RegionType.InsertionWithinNamedRegion,
    RegionType.DeletionAfterNamedRegion,
    RegionType.InsertionBetweenNamedRegions,
};


Sorting needs to be fast, right? So how about using a dictionary for the oder lookup and not the O(n) List.IndexOf?
private static readonly Dictionary&lt;RegionType, int&gt; _regionTypeOrder = new RegionType[] 
{
    RegionType.DeletionBeforeNamedRegion,
    RegionType.NamedRegion,
    RegionType.DeletionWithinNamedRegion,
    RegionType.InsertionWithinNamedRegion,
    RegionType.DeletionAfterNamedRegion,
    RegionType.InsertionBetweenNamedRegions,
}
.Select((x, i) =&gt; new { Key = x, Order = i })
.ToDictionary(x =&gt; x.Key, x =&gt; x.Order);

with it, the lines

var xSort = sortOrderByType.IndexOf(x.Type);
var ySort = sortOrderByType.IndexOf(y.Type);


can become
var xSort = _regionTypeOrder[x.Type];
var ySort = _regionTypeOrder[y.Type];



var xSort = sortOrderByType.IndexOf(x.Type);
var ySort = sortOrderByType.IndexOf(y.Type);

if (xSort &lt; 0) xSort = int.MaxValue;
if (ySort &lt; 0) ySort = int.MaxValue;


the index should never be less then zero. If it is, then there is an error. Its an enum and the property isn't nullable so I think the protection isn't necessary.
After getting ther RegionType order from the dictionary you should be able to immediately call this

return xSort.CompareTo(ySort);