If a lot of variables are on their bounds at optimality, you may be well-served by an active-set method such as Sequential Quadratic Programming (SQP). Because your constraints are all linear (and all simple bound constraints at that), there is none of the drama SQP methods have to deal with when linearizing constraints. A nullspace version of SQP, sometimes called Reduced Hessian, could be especially effective if the number of active constraints at optimality is high, i.e., variables on their bound.