We can't disable Wdeprecate-declarations since that informs us of deprecated platform APIs.
My suggestion for this is always "don't deprecate things". It's very easy to mark some existing function as deprecated, but often very hard to remove uses of it. So the deprecated thing stays around forever, and not too much is won by marking it deprecated -- no problems really disappear. The big win is if you can also remove all uses, but then you can delete the old API, and you don't need an attribute.
In other words, if it's not worth cleaning up callers, most of the time it's not worth deprecating either. In many (most?) cases, "remove all calls and then the function" or "don't deprecate the function, even if you don't like it" is all you need.
The one exception is a long-running migration from old api A to new api B where a team owns the migration, but new uses of old api A are introduced at a high rate. Here, what Roland suggests or a presubmit can help.
There's the situation where you introduce a better way to do something but don't think removing the old way is really worth it. Here, you might argue that marking the old thing as deprecated but not doing anything about it will lead to the new way being adopted over time. I think experience shows that isn't what happens -- the old thing will stay around forever, as will the new way. IMHO having a new better and an old worse way is surprisingly often not better than having just one way of doing something. So this is a pattern I think we'd want to discourage. (Not ban outright, but I think we tend to do this kind of thing too often, not too rarely.)