Proactively Determining Bad Plans/Poor Performance at a Query Level
Instead of developing a solution yourself you could consider upgrading to SQL Server 2017 and trying out the automatic tuning feature. Reproducing part of the documentation:


  Database Engine automatically detects any potential plan choice
  regression including the plan that should be used instead of the wrong
  plan. When the Database Engine applies the last known good plan, it
  automatically monitors the performance of the forced plan. If the
  forced plan is not better than the regressed plan, the new plan will
  be unforced and the Database Engine will compile a new plan. If
  Database Engine verifies that the forced plan is better than regressed
  one, the forced plan will be retained until a recompile (for example,
  on next statistics or schema change) if it is better than the
  regressed plan.
  
  Note: Any plans auto forced do not persist on a restart of the SQL
  Server instance.


This could make it easier to meet the "react to it before the users notice the performance degradation" option.