You can't optimize a system that does not exist yet. You can't effectively optimize a system you can't measure.
Design activities allow you to think about how a system may and should behave. Optimization activities involve analysis of how a system actually behaves, and making changes typically involving performance trade offs, then analyzing those changes.
These activities can (typically should) be iterative in nature over a complicated projects development, and they do feed into each other somewhat.
What is true as a counterpoint to Knuth's maxim, is that if you do not think about the implications of your design early enough, you can easily end up painting yourself into a performance corner it may be difficult or impossible to optimize your way out of. If you've picked a fundamentally inappropriate data structure or algorithm, you may be in trouble well before you realize it. This is also why software developers would often benefit from more targeted design prototypes, earlier on.
And yes, for some of this there is no easy replacement for experience.
Another thing to think about: Optimization almost always costs you something, at the very least time, but often code maintainability, portability, generality etc. It is usually a trade-off (but not always).
Often good design work will improve your system in many respects at once.