What you do is similar to C ++ and RAII. And in C #, it's about as close as the C ++ / RAII idiom as you can get.
Eric Lippert, who knows something or something about C #, is categorically against using the IDispose operator and using C # RAII as an idiom. See His detailed answer here, Is it insulting to use IDisposable and "using" as a means to get "scope behavior". for exception safety? .
Part of the problem with the IDisposable used in this RAII method is that IDisposable has very strict requirements for proper use. Almost all of the C # code I've seen that uses IDisposable cannot correctly implement the template. Joe Duffy made a blog post detailing the right ways to implement the IDisposable http://joeduffyblog.com/2005/04/08/dg-update-dispose-finalization-and-resource-management/ template. Joe's information is much more detailed and extensive than is mentioned in MSDN. Joe also knows something about C #, and there were many very smart contributors who helped shape this document.
Simple things can be done to implement a minimal IDisposable template (for use, for example, in RAII), for example, to compact a class, and since there are no unmanaged resources that do not have a finalizer, and such. MSDN https://msdn.microsoft.com/en-us/library/system.objectdisposedexception%28v=vs.110%29.aspx is a good overview, but Joe's information contains all the details.
But one thing you can't get away with with IDisposable is its viral nature. Classes that hold on to an element that is IDisposable themselves should become IDisposable ... not a problem in the using(RAII raii = Pool.GetRAII()) script using(RAII raii = Pool.GetRAII()) , but something to keep in mind.
All that has been said, despite Ericβs position (from which I tend to agree with him on most of the rest) and the Joe 50 page essay on how to implement the IDisposable template correctly ... I use it as a C # RAII idiom.
Now, only if C # has 1) non-empty links (e.g. C ++ or D or SpeC #) and 2) deeply immutable data types (e.g. D or even F # [ , you can do F # C #, but this LOT of the template, and it is too difficult to do it right ... makes it easy hard and hard impossible ]) and 3) design by contract as part of the language itself (for example, D or Eiffel or Spe #, and not the abomination of C # Code Contracts). sigh Maybe C # 7.