You can add a second parameter to your attribute constructor to tell the compiler to throw a compilation error (rather than the usual "method is obsolete" warning) and the error will use your attribute's message. The error will only occur if the method is called.
[Obsolete("This method has become obsolete, please override `OnEnable` instead.", true)]
public virtual void OnSelected() {
}
Note that this will not remove the CS0672 warning.