You would first have to decide what it is that you want to do, and what costs you are going to be concerned with. For example, you can express numerals in many different ways, for example "twelve", "12", "1100" (binary), "c" (hex), "14" (octal). Binary uses fewer things; hex is shorter; decimal is easier to understand and work with (e.g. adding a column of numbers).
If you want to exactly represent a specific pronunciation of a word, a recording is the most efficient (indeed, the only possible way to represent the specific pronunciation exactly). A narrow transcription can get you in the ballpark for pronunciation, and spelling comes in last place. You can get different result if the goal is to identify a specific word. A recording or transcription of [sajt] will still leave you in the dark as to the choice of sight, site or cite. There are some cases where spelling is not distinct and pronunciation is ("lead" -- verb or metal). However, I think that spelling is a better predictor of intended word, especially in context (where the verb vs. noun usage of "house" can be inferred).
Some people do not know the pronunciation of English words, and some do not know the spelling of English words. All you need, to know a word, is some representation that you can tie to the concept in question.
You could make words shorter, but that doesn't increase efficiency, since processing time would go up. A way to do this is replace each spelled word with its rank in an authoritative frequency list. So "the" becomes "1", "be" becomes "2", "because" becomes "94". If you code this in base 36, the numbers could be really short. The only problem is that it would take forever to encode and decode messages, but if processing time is not a concern, you could really save a lot of space this way.