I defined a function that could help;
KTEqs[obj_, cons_List, vars_] :=
 Module[{consconvrule = {GreaterEqual[x_, y_] -> LessEqual[y - x, 0], 
     Equal[x_, y_] -> Equal[x - y, 0], 
     LessEqual[x_, y_] -> LessEqual[x - y, 0],
     LessEqual[lb_, x_, ub_] -> LessEqual[(x - lb) (x - ub), 0], 
     GreaterEqual[ub_, x_, lb_] -> LessEqual[(x - lb) (x - ub), 0]} 
    , stdcons, eqcons, ineqcons, lambdas, mus, lagrangian, eqs1, eqs2,
    eqs3, alleqns, allvars },
  stdcons = cons /. consconvrule;
  eqcons = Cases[stdcons, Equal[_, 0]][[All, 1]];
  ineqcons = Cases[stdcons, LessEqual[_, 0]][[All, 1]];
  lambdas = Array[\[Lambda], Length[eqcons]];
  mus = Array[\[Mu], Length[ineqcons]];
  lagrangian = obj + lambdas.eqcons + mus.ineqcons;
  eqs1 = Thread[ D[lagrangian, {vars}] == 0];
  eqs2 = Thread[mus >=   0];
  eqs3 = Thread[mus*ineqcons == 0];
  alleqns = Join[eqs1, eqs2, eqs3, cons];
  allvars = Join[vars, lambdas, mus];
  {alleqns, allvars}
  ]
KTMinimize[obj_, cons_List, vars_List] :=
 Block[{kteqs, r, rls, objvals, minobj, objrls, res},
  kteqs = KTEqs[obj, cons, vars];
  r = LogicalExpand @  
    Reduce[Sequence @@ kteqs, Backsubstitution -> True, 
     Cubics -> True, Quartics -> True];
  If[Head[r] === And,
   rls = List @@ ToRules[r];
   objvals = obj /. rls;
   res = {objvals, rls},
   (* Else *)
   rls = List @@ (ToRules /@ r);
   objvals = obj /. rls;
   minobj = Min[objvals];
   objrls = Thread[{objvals, rls}];
   res = Select[objrls, #[[1]] == minobj &];
   If[Length[res] == 1, res = res[[1]]];
   ];
  res
  ]
In[3]:= AbsoluteTiming[
 KTMinimize[-1000000/100*(25*b + 75*c + 100*(1 - a - b - c)), {a >= 0,
     b >= 0, c >= 0, 
    a^101 + 101*a^100*b + 101*a^100*c + 101*100*a^99*b*c + 
      50*100*a^99*b^2 >= 1/20}, {a, b, c}] // N]
Out[3]= {3.48344, {-35843.9, {a -> 0.953819, b -> 0.00444532, 
   c -> 0.028011, \[Mu][1.] -> 
    3.42892*10^-10, \[Mu][2.] -> -5.08376*10^-10, \[Mu][3.] -> 
    5.66923*10^-10, \[Mu][4.] -> 190922.}}}