Yes, it does. A heuristic callback is a control callback and the presence of any control callback will switch CPLEX from dynamic search to traditional search. There is nothing you can do about that.
Also note that adding a control callback will by default switch CPLEX to single-threaded mode. You can get back multi-threaded mode by explicitly setting CPX_PARAM_THREADS to the number of desired threads (without control callbacks uses as many threads as there are cores, as indicated by CPXgetnumcores). You should try that and see whether it gives you back the desired performance.
Finally, the heuristic callback is invoked at every node. If you spend a lot of time in the callback then this may slow down things as well. Maybe you want to do the heavy work only every Nth node or so.
#CPLEXOptimizers#DecisionOptimization