I doubt that it matters. There are other factors that will matter more.
I would question the starting premise:
2d vector is inefficient
Sometimes we trade off pure speed for better abstraction. I'll bet the std::string class can be considered inefficient by some measures when compared to raw byte or character array, but I'd still use it.
You'll have a better case if you stop worrying about broad statements and focus on your use case.
The most common application of 2D arrays I know of is for vectors, matricies, and linear algebra. There are other factors for that problem that will be far more important than the choice of underlying data structure.
Since C++ is an object-oriented language, you can solve this easily by starting with an interface and creating implementations that use vector and array. Test them against a meaningful data set and measure.