Yeah, you are correct that you can't add a non-commercial clause to the GPL and have it remain the GPL (or compatible with the GPL in either direction).
You could choose to only grant GPL licenses directly to non-profits. They would be free to pass along the same rights to commercial entities, if they chose. It's possible that in a practical sense this would present enough of a hurdle for larger companies to prefer to pay (but plenty possible that it would not).
It is also possible to grant other licenses for situations where the GPL prevents some particular for-profit activity - that kind of approach is presently making some people some money, although the incentives can be weird.
You could choose to only grant GPL licenses directly to non-profits. They would be free to pass along the same rights to commercial entities, if they chose. It's possible that in a practical sense this would present enough of a hurdle for larger companies to prefer to pay (but plenty possible that it would not).
It is also possible to grant other licenses for situations where the GPL prevents some particular for-profit activity - that kind of approach is presently making some people some money, although the incentives can be weird.