Pascal,
this topic has been discussed before, both here and on Stack Overflow.
Spock's rule execution is fully compatible with JUnit's, except for one difference: In Spock, an exception occurring inside a test method is caught and handled before control is passed back to a TestRule, whereas in JUnit it isn't. This isn't something that's easy to change. MethodRule doesn't have this problem, and isn't deprecated anymore in latest JUnit. But as you said, it differs from TestRule in that it only wraps around the test method, but not around setup and cleanup.
In general, retrying with a TestRule doesn't seem ideal. If nothing else, the same test instance will be used each time (also in JUnit). If you can live with these kinds of limitations, you could implement a MethodRule and use setup/cleanup blocks instead of setup/cleanup methods. I can think of a few other potential (Spock-specific) solutions, but they aren't straightforward to explain or implement. Eventually, I'd like to enhance the extension SPI in a way that makes it easy to express repetition/retry.
Hope this helps. What's your motivation for retrying?
Cheers,
Peter