There's nothing about the git/mercurial object models that makes them intrinsically inefficient with monorepos.
What's inefficient is materializing the object database (when cloning) and the working copy (when checking out), when you're only going to need tiny portions of them.
Subversion doesn't have the first problem (but comes with extremely slow history operations), but sparse checkouts don't really solve the second because you have to statically know what to filter.
A better direction is instead to virtualize the filesystem, so you get the semantics of a real monorepo with git/mercurial, and you fetch only what's actually needed without any change to your tooling (it just needs to interact with the filesystem). It's also very easy to transparently implement caching and prefetching this way.
This is the approach that Facebook and Microsoft took, and I believe Google too.
It works against GitHub's design goals. You could work on multiple, logically distinct projects in the same git repository easily, if you so choose. git was designed for Linux's workflow.
People like to use distributed workflows even with monorepos. E.g. chains of commits, branches, rewriting local history, etc.
It's clear that people want a mixture of monorepos with distributed workflows. There are two ways to get there: add distributed flows to a monorepos, or build a monorepo layer over a distributed tool.
Both seem like valid approaches. The market will decide which approach it prefers.
I mean, most of the people in industry today have known no character encoding except ASCII and its supersets --- and that's a good thing!
There are others that aren't free (e.g. Perforce) and some that aren't quite dedicated to the monorepos & subtree workflow, but which handle it better by design (e.g. Darcs, http://darcs.net/).
But, mostly I'm thinking of Subversion.
The problem with using svn on the server is the lack of good tooling for things like code review. There's no SvnHub or SvnLab.
Its certainly not against the design goals as official tooling supports shallow and sparse checkouts, they're just experimental features.
We should just strive forward and continue to make these features good.
I get the impression that things like LFS, submodule and subtree are hacks added onto git to try to make it behave like something it isn't.