enumをシリアライズする必要のあるプログラムを設計しています。

enumの値を変更するとシリアライズしたデータが矛盾するということは理解していますが、運用開始後も仕様変更によるenum値の変更が回避できません。
enumは変更に対して柔軟ではないように思えますが、よいenumの使い方はあるでしょうか?
あるいは、enum以外の方法(文字列を使うなど)がよいのでしょうか?

具体的には下記のようにTokenTypeを定義しています。
TokenTypetokenType <= TokenType.SystemCのような条件の使い方もします。
また、TokenDictionaryのキーとして使用します

[Serializable]
public enum TokenType : ushort
{
    Empty = 0,
    SystemA = 1,
    SystemB = 2,
    SystemC = 3,
    PluginX = 256,
    // 今後 SystemD や PluginY が追加される可能性がある
}

[Serializable]
public struct Token
{
    public TokenType Type;
    public ushort ID;
}