When writing I try to follow 3 rules. If followed, your 0 vs o is not an issue.
- Use math mode for maths. For example, if I have $10$ orangutangs and I buy $32$ more then I have $42$ orangutangs.
- Spell out the numbers for small numbers. For example, "follow three rules" but not "follow thirty-three rules". (The first journal I submitted to stipulated that I do this, and I have done so ever since.)
- Use the normal numbers the rest of the time. For example, I bought lots of orangutangs in January 2015.
A related TeX.SE answer is here. Notably, this answer includes the a quote from Donald Knuth (the man behind $\TeX$).
The following is an excerpt from Knuth's article "Typesetting Concrete Mathematics" (TUGBoat, 1989) [Aside: The textbook Concrete Mathematics was typeset using
Concrete Roman as the text font and
Euler as the math font]:
There was, however, one significant difference between typing the manuscripts for Concrete Mathematics and for The Art of Computer Programming, caused by the fact that the Euler numerals $0123456789$ are distinctly different from the numerals 0123456789 in ordinary text. [...]
This experience ... taught me that there is a useful and meaningful distinction between text numerals and mathematical numerals. Text numerals are used in contexts like '1776' and 'Chapter 5' and '41 ways', where the numbers are essentially part of the English language; mathematical numerals, by contrast, are
used in contexts like 'the greatest common divisor of $12$ and $18$ is $6$', where the numbers are part of the mathematics. [...]
Equation numbers presented us with one of the most perplexing design questions. Should those numbers be typeset in Euler or cast in Concrete? After several experiments we hit on a solution that must be right, because it seems so obvious in retrospect: We decided to set equation numbers in an "oldstyle" variant of Concrete Roman ...
Interestingly, I notice when typing this answer that the typefaces are different for typing and for reading - the typing typeface has a slashed zero, which is designed to get rid of the ambiguity you mention.