Nice breakdown. The part that usually decides whether faster tests stay fast is the reset strategy: if state cleanup is deterministic and the failure surface is obvious, teams stop re-running flaky suites and start trusting the feedback loop.
One of the best ways for cleanups is if the testing library wraps each test in a transaction, so no test actually pollutes the database, every test process runs the migration only once and all the assertions are kept in a transaction, frameworks like Laravel and Django do provide this.