You could try the -O0 or the -debug_all option (or both) to "vcs" executable - turns off many optimizations.
But, I've also never seen VCS complain about SDF annotation being affected by optimizations you mention (but not Radiant Technology option cannot be enabled for SDF, but you also did not indicate enabling that).
BTW, SDF should only refer to leaf-cell (i.e. std-cell or hard-macro) pins and instances, and not hierarchical modules.
(it does *use* the hierarchy to reach down to these leaf-cells, but does not refer to pins on hierarchical modules)
That is why unused ports or modules (e.g. that do not reach or contain any leaf-cells) should not cause such problems.
Maybe some leaf-cells disappeared between when SDF was generated and the final netlist(s) was written out?
Maybe you are forgetting a link-library? (but I'd think you'd then see other messages about that)
Maybe you should include an example of an SDF-annotator message?
Or at least chase down the line in the SDF file it refers to and see if there is a hint to follow? (including going back into the tool that generated the SDF to gain more info on what cell it relates to)
This is all somewhat obvious flow-debug stuff.
I also recall issues with VHDL modules/entities having complex-type ports (e.g. structures or multidimensional arrays) being instantiated inside of Verilog, but I am expecting that this issue went away once SystemVerilog was supported (which now also supports such things).