As I know, good solution is when it converges, the change of few last iteration does not improves (exit flag 1, 3). Or when solution meets your specified value (exit flag 5).
And not so good solution is if it stops due to max time/iteration (exit flag 0, -4, -5), means it may not converge. It may gives better solution when you increase those limits. Or when the solution change is smaller than matlab capability (exit flag 4), this means you may need to improve your objective function.
Clearly bad solution is when no solution is found (exit flag -2).