one way to do this is to write your own SearchComponent and implement that logic there. First run a edismax request with mm=100%, if you get results, return them, if not then run it with mm=0% etc (you can even do it in more steps, 50%...).
Or you can also run with mm=0% always but look at the score/matches and keep only the best results on the client side. You could use highlighting to see which words were matched.