We need the 2D equivalent of the Physics.ComputePenetration method. Essentially the Physics2D.GetContacts() method with the additional origin and rotation parameters would do just fine. Currently you can only check for contacts from your Collider2D's current position which is frustratingly limiting.
This was added a couple of years ago to the 3D Physics but for some reason there isn't a corresponding method for 2D.
This is absolutely essential in making custom character controllers which is why it was requested and added to Unity in the first place.
With this method you get all the data you need in order to resolve a collision.