The primary use case for mixed-mode assemblies is having to interop with existing C or C++ code. Very common of course.
It doesn't by design make code faster. There's a cost associated with transitioning from managed code to native code execution. It is heavily optimized, if you do it right then you only pay for the cost of writing a cookie on the stack that the garbage collector recognizes so that it will avoid looking through unmanaged stack frames for object references. Costs but a handful of cpu cycles. But additional cost may be incurred when you need to translate data. A string being the canonical example. Or pin a managed object so it can't be moved by the collector, an array being the canonical example.
But yes, you certainly can use mixed-mode assemblies to solve a perf problem. If you can limit the number of times you make a transition and you can take advantage of the C or C++ compiler's ability to generate highly optimized code then you could be ahead. There's no magic formula that says you will and it certainly isn't that easy to beat the jitter. It has a pretty effective optimizer although it can't quite beat a C compiler's optimizer, given that it operates under time constraints. The quality of the code you write matters the most.
Always use a profiler first to eliminate any bloopers, find the actual hot spots and to ensure it is worth trying.