Mark a taxonomy term as "deprecated"
Termsatus module can help you.

This add a status "publis" or "unpublish" on terms like nodes, and is handled by permission (that can solve first three points), views, etc.

I think the optional point need a custom code using hook_node_validate check the status of term an send the custom error message attached to the field.