I've got ~36000 hours of professional programming behind me and like you, there have been many a time where initial testing has highlighted a performance issues.
So out comes the hash table, the binary search, the double checking of the memory allocations or the some new index on the SQL table.
Now I know Big O tries to formalise these sort of things (or at least I hope that is the case), but is knowing the answers to these Big O questions that important?
Since I have Engineering degree I certainly can’t give a credible answer to a Big O question, but I have absolutely no trouble fixing sluggish code.
> But you should be able to recognize that a design
Unfortunately, at a lot of the places I've worked, not much time is ever allocated to design :(
Managers seem to want easy to read, high level, non technical design documents to take to their managers meetings and once those are approved they then want something coded ready for QA.