My idea above is roughly equivalent to the "zero-config" strategy you mention.
It's kinda crazy that if a direct dependency doesn't use some feature from a transitive dependency and the direct dependency forgets to disable it or expose a way to disable it you're still stuck with it.
Putting it another way that's even more controversial, because I do genuinely believe it and I think we need to radically change how we think about this: I don't think the Rust compiler is slow. I think that it just compiles too much code, and if we solved that, we'd find that it's fast enough in practice that most people would stop complaining about compile times.
Something does seem a little off about this, though. Ideally for this `Debug` case there would be an annotation that says "compile this lazily, don't inline". Maybe there doesn't even need to be a new annotation, just `#[inline] #[cold]`. Which looks pretty weird, but might work already.