The AtlasAsset is designed to be stateless. At load time, the SkeletonData is loaded using AtlasAsset and the Materials are assigned to each individual attachment. Changes to AtlasAsset after that won't reflect on attachments that were already loaded.
A material check and set-if-necessary happens regardless of whether you use CustomMaterialOverride. You'll be hard pressed to produce a meaningful performance difference by using it.
If just the thought of it bothers you, you can always modify SkeletonRenderer.cs to never perform that check and update. spine-runtimes/SkeletonRenderer.cs at 3.6
(comment out 305, 308, 310)
Then you can set the MeshRenderer's material array yourself and Spine won't touch it.
But you'll have to apply this change every time you update your runtime.