There are a couple of places you can do this: as a message filter, or a content filter.
For ease of support, a content filter is easier…
In Mail Policies/Outgoing Content Filters create 2 filters
The first one looks for public, an if its MISSING, bounce the email as a final action.
The second one would just strip the Subject line of the word public. See screen shots below.
This is a little draconian... so be careful with what you're doing here...

