OP here.
I tried the vinegar soak before washing, it didn't seem to make any difference. Neither did an oxyclean soak.
What did work was drying in the hot, hot sun. I guess the UV zapped the nasties. Sadly, it is now coming into winter, so I don't know how long I will be able to do that.
I think his antiperspirant is a major contributor, as a bunch if people suggested. I bought him some hippie deodorant, and he agreed to give it an honest try. The antiperspirant is also making his work start armpits discolored, so if I can get him to give it up, it would also save us some $$$ in err placing work shirts.
I checked the labels if some of his t-shirts, and it appears they are all nasty- the poly ones, cotton/poly blends, and 100% cotton ones. So I am attributing it more to him and the antiperspirant than to the fiber content.
I used to make detergent, and it did not do a good job on kids stains, at all. I was having to re-wash their clothes and use a ton of stain spray. I am not interested in doing that experiment again. The costco stuff is cheap and works well overall. I do have half a bottle of sport wash (meant for camping and hunters) that I use on delicate stuff like our winter coats, and our camping gear. I might try it. It's pretty expensive, though, so not a great long term solution.