La solución es la siguiente:
1) Programas el core del algoritmo en C++
2) Programas el GUI en C# o cualquier otro de .Net
3) Programas un Wrapper en C++/CLI que lo consumes desde el GUI en .Net
4) En .Net tienes clases para aprovechar los núcleos del CPU por lo que si tu algoritmo puede dividirse en Tasks, tienes dos opciones inclusivas: aprovechar los núcleos y aprovechar remoting/wcf + Parallel tasks + plinq para ejecutar tu algoritmo en C++ en varios equipos consumiendo .Net
5) Nos dices como te fue y brindamos por el éxito de tu app!
Coclusión:
Nada va a ser más rápido que código nativo. Nada va a ser más scalable y rápido de programar que administrado. Es decir, usa lo mejor de ambos mundos!
Un saludo..
EDIT: me acabo de dar cuenta que es casi igual a lo que dijo neoncyber, pero el no sugiere C++/CLI para el wrapper, sino usar interop directamente desde .net. Es casi igual, pero usando el wrapper queda más limpio, escalable, tienes una capa más de abstracción, y no le resta rendimiento tampoco.