That's not stealing if the food is free. Don't want people taking free food? Don't make the food free.
You're describing exactly the problem. The company wants to appear generous, but they're not actually generous. A generous person doesn't care if that food is meant to feed a family.
This hurts the employees, but it also hurts the company. Naturally this erodes trust. If I worked at Meta, I would be scared to submit an expense report.
It's the same reason a lot of companies have "unlimited PTO" but the employees are shivering in their boots when they take off. Because they don't trust their employer. This strategy works, kind of, but the long-term effects is the erosion of culture and inevitably performance.
Either be nice, or don't be. There's nothing wrong with not being nice - companies aren't people, they have no concept of morals. So who cares.