Since you are asking for "a way to prevent the divide by zero operation from happening in the first place," let me suggest another approach that is just slightly more involved than the obvious answer (i.e., just don't include zeros in b):
Lets' pick two lists that cover various cases with zeros:
a = {1, 2, 3, 4, 0, 0};
b = {5, 6, 0, 8, 1, 0};
Now I'll define a replacement rule:
inertZero = {0|0. -> "0"};
Its purpose is to replace numerical zeros by a string "0". Strings can be used in calculations but don't trigger the errors you want to avoid. This allows you to do the division like so:
c = a/(b /. inertZero)
$\left\{\frac{1}{5},\frac{1}{3},\frac{3}{0},\frac{1}{2},0,0\right\}$
Depending on your needs, this could be the end of the story, showing you visually where the division by zero would have occurred. Note in particular the last entry, where we had a 0/0 division. Here, Mathematica makes a choice for us: instead of returning Indeterminate, it sets the result to zero. If you don't like this resolution, one could change the rule.
But maybe you want more, e.g., rescue the remaining divide-by-zero cases somehow. Not knowing exactly what you want to do with them, I'll just go on by assuming you want them to return Infinity. So obviously we'll need another replacement rule, and let Mathematica draw its own conclusions about where $\infty$ should appear:
Limit[c /. "0" -> ε, ε -> 0]
$\left\{\frac{1}{5},\frac{1}{3},\infty ,\frac{1}{2},0,0\right\}$