列挙体をメンバ名の順(値に割り当てられている名前の順)に並べるには、次のように並べ替え順序を定義する必要があります。 ただ、次の例にあるように、列挙体ではメンバ名で定義されていない値も設定できるため、そういった値をどう取り扱うかについての考慮も必要となってきます。

列挙体の値をメンバ名の順にソートする
using System;

enum Number {
  MinusTwo = -2,
  MinusOne = -1,
  Zero = 0,
  One = 1,
  Two = 2,
}

class Sample {
  // 列挙体の値を比較するメソッド
  static int CompareNumber(Number x, Number y)
  {
    // 列挙体の値を文字列(メンバ名)に変換
    string xx = x.ToString("G");
    string yy = y.ToString("G");

    // 文字列として比較した結果を返す
    return string.Compare(xx, yy);
  }

  static void Main()
  {
    Number[] arr = new Number[] {
      Number.Zero, Number.One, Number.MinusOne, Number.Two, Number.MinusTwo,
      (Number)3, // <- 列挙体のメンバで定義されていない値
    };

    Array.Sort(arr, CompareNumber);

    foreach (Number val in arr) {
      Console.WriteLine("{0,-8:G} ({0:D})", val);
    }
  }
}
実行結果
3        (3)
MinusOne (-1)
MinusTwo (-2)
One      (1)
Two      (2)
Zero     (0)

列挙体の書式・文字列化については列挙体の基本と操作書式指定子を参照してください。