I've been thinking about this a fair bit over the last couple weeks and am definitely leaning towards Becca's solution.
A large part of the reason for this pitch initially was for the completionHandlerIndex argument that would be useful for eg. refactorings. This didn't make a lot of sense to put on @available. But through the discussion in this thread I now realise that this isn't actually required - in the cases that a call could be refactored, it's simple enough to determine the index by looking at the parameters of the matched functions.
So from there, @available looks very reasonable solution.
The next question is whether we should introduce a new parameter to @available purely for this purpose. If renamed: required deprecated, I think a new parameter would be necessary (since it isn't necessarily deprecated). As Becca mentioned though, that's not the case.
Another argument for a separate parameter would be that it could be more specific in what it allows as its argument. But I don't think adding another inconsistent function reference is all that helpful. A better idea there is probably what Jordan mentioned, ie. typecheck the renamed: argument and deprecate allowing a reference to anything but a Swift declaration in scope.
So with all that said, I don't think anything new needs to be added for this purpose. Thanks for the input everyone, much appreciated!