I try to (generally) adhere to an approach that says do things in this order:
1. Make it work
2. Make it correct
3. Make it fast
Now that said, I'm not advocating for blinding making obviously silly decisions vis-a-vis performance, like using bubble-sort to sort an array that will clearly grow to millions of elements, etc. But I would argue for using heuristics and reasonable "rules of thumb" where performance is concerned, during the first pass, fulfill (1) and (2) and then come back to (3) as necessary. Maybe the initial implementation turns out to be fast enough. Great, ship it. If not, start doing optimization.
What does all of that have to do with clean code? Well, I'd argue that following some "clean code" like conventions (if not exactly the stuff from that book) is in the spirit of (2). Maybe we should rename that "make it correct and understandable". Anyway, I think you get the point. Start with leaning towards correct and understandable... "clean" if you want to call it that, then come back and back off some of those properties to gain performance if necessary. And of course you can relax "understandable" a bit, but you probably can't relax "correct" much if it all. After all, it doesn't matter how fast a program is if it gives the wrong results.