The solution here is not to use the same name for two different concepts in the first place. Python doesn't have scopes associated with blocks, only with functions, and occasionally this means you have to pick your names carefully -- the same happens e.g. if you reuse a variable as a for-loop control variable.
You can say that you don't want failed cases to bind any variables -- but what if the pattern succeeds and now a guard (the 'if' clause) needs to check the variable? We went down the route of how to make this work and in the end decided it would be too complicated.
Or what if a case succeeds, and then after the match statement is over and done with (not in `case _:`) you still wanted access to the global 'name'? The long and short of it is that match statements are liable to any or all names bound in any of the patterns used, and your code is incorrect if you aren't prepared for that.
A variant of the syntax to allow alternate semantics sounds worse.