Getting around symbol favoritism of Simplify and FullSimplify

There is an old mathgroup discussion on this. The issue is that Simplify uses a Groebner basis and this is dependent on lexical order. The suggestion for getting around this was to use this code from Adam Strzebonski.

VOISimplify[vars_, expr_, assum_: True] := Module[{perm, ee, best},
  perm = Permutations[vars];
  ee = (FullSimplify @@ ({expr, assum} /. Thread[vars -> #])) & /@ 
    perm;
  best = Sort[Transpose[{LeafCount /@ ee, ee, perm}]][[1]];
  best[[2]] /. Thread[best[[3]] -> vars]]

Then we have

VOISimplify[{a, b, c}, b + c, b + c == a]

a

However, checking all lexical orders could be expensive... I am no expert on this but just remember I had a similar problem in 2005. It is probably time to have further discussions on this issue.