reduce the number of shader combos you have. abuse the material instance system to it’s full potential. create “core” shaders. avoid dynamic shader switches. if you just switch out textures it will not create more shader combos / permutations.
on the loading end of things you can load and precache the whole game’s core shaders on the initial loading screen. or while you run the intro video. or just add a shader compile screen. just load and unload all types of objects that use all the different shader combos thruout the game. the compile time depends how well you implement the “core” and instanced it.
that’s how i would do it.