It could work multi-threading, but it's not automatic - the graphic client is in the same serial line the Orbiter core is (unless the core runs client in different process, indications of which i didn't found).
Running too much threads for simple things like console and controls are quite inefficient, but MFD's and data loading can be worth it. Getting memory&heap manager, buffers and context handling into separate threads will give you a nightmare of synchronisation and little actual advantage.
It is worth to put separate, but parallel computations into different threads IF there are more than 1 physical CPU entity - core or whole, so the system should be designed in such a way as to allow it to run in both serial and parallel mode, not forcing CPU to multitask if there are only 1 core.
Looking in the future, when we will have dozens of cores per CPU (as intel promises soon), any part of the code that could be easily synchronized could be separated into a thread.
For the graphic client, a rendering thread and a calculating thread should be good enough. Part of the latter will be on a GPU shader.
Making OVP clients completely in a separate thread will require some restructurisation to get top efficiency - one thing is that the core should collect all the scene data into 1 buffer, that will be available to the drawing thread, updated by the core on client's request. That way the core will be running most of the time without any interruptions for multiple synchronization checks, and a client could take whatever long and strong it needs to draw.
Doesn't sound like an easy solution, too many changes all over the interface, so it's for Dr. Martin to decide.