If you want companies to give back if they use your code, then use GPL.
This hides the cost of the GPL. A more appropriate formulation is
"If you want to force companies to give back all changes they make to your software at the cost of having them unable to make use of your software and contribute back at all in cases where they could only give back some of their changes, use the GPL."
I was a FreeBSD developer back in the day. I have worked for companies that made changes to open source software, both as the person doing those changes and in other situations where my team utilized open sourced code and other internal teams made modifications to it. My experience is that companies want to give back anything that is not strategic, and the changes they make to BSD-licensed code bases (really, all code bases) are mostly utilitarian rather than strategic. They want to give back for several pragmatic reasons: It avoids maintenance costs for their changes, it is good PR, their engineers feel good about doing it, and it creates a good relationship to the upstream project, meaning that if they need help, they're likely to get it.
In my experience companies contribute more to BSD/MIT licensed code bases than to GPLed codebases. It is very seldom that it would make sense for a company to make a change to a codebase under GPL and give it back and it would not have made sense to give it back under BSD/MIT. It may be different from individuals. Some individuals believe companies deriving from BSD/MIT-licensed code bases and don't give all their changes back are exploitative, and thus those individuals avoid working on BSD/MIT-licensed codebases.
Of course, if we convince people that companies working on BSD/MIT codebases is typically not exploitative, then the individual part will also impove.