I understand what you want, and I sure hope that whatever compiler you use (or the infrastructure you have added) has keyword phrases that enforce that behavior ("extern volatile const"? "__pragma__(calibration)"?), because "calibration constant" are for sure well outside the language definition/specification, and compile-time evaluation of constant expressions is an important and common part of reasonable optimization.
I'm not aware of any specific trickery that had to be done to get it right and I think I already looked at all the places where it could have been applied.
Then again, in a large company, you have dedicated departments just for the compiler setup. So I wouldn't rule out that there is something I always overlooked.
Anyway, stuff like this is always discussed with the compiler vendor. It's not like trying and hoping the best if that's your concern. One of the reasons why a vanilla GCC is never on the short list.
(and oh, what a nightmare to debug, should the compile decide that it can optimize your constants away in addition, but not in multiplication...)
I was involved in all kind of unpleasant debugging stuff, but never saw a behavior like this.
BTW: if you think that's tricky then wait until you map your calibration ROM to RAM though MMU or SDA pointer trickery, write a new value to RAM and observe how the CPU takes some constants from RAM but some still from ROM due to cache lines not being flushed.
That is hard to debug.
It is the sort of compiler behavior that I would be really reluctant to count on!
Then I guess you shouldn't drive any car built after 1980

(not all compilers put "const" variables in flash in the first place. Especially on harvard architecture machines.)
Well, assuming we're talking about microcontrollers, the constants are obviously always in flash. The only question is if they are then copied to RAM or accessed from Flash.
Harvard architecture doesn't really have much to do with this. It's just that the compiler needs to create different opcodes to read from ROM and RAM but a good compiler hides that from you.
E.g. at the beginning of the century/millenium, the 1st version of AVR-GCC was not able to fetch constants from flash due to other opcodes for reading from flash, so you either had to read from the RAM copy
or use specific intrinsic commands. At the same time, commercial compilers could already do this without workarounds.
Anyway, in the projects I worked on, this is just a matter of locator setup and maybe runtime initialization (which we usually do on our own anyway).