Hi Rain, and welcome to the forum! Yes, you are tackling one of the most finicky of cheeses - many of us have made many very good cheeses, without ever truly succeeding with mozzarella (myself included). On the other hand, there are some here who seem to have the knack for it ...
Some answers to your questions and overall observations:
As you have learned, pH is the key to mozzarella. Specifically, you need a pH of around 5.3; higher pH (less acid), and the cheese won't stretch; lower pH (more acid), and it becomes grainy and crumbly.
There are two ways to get the milk to the proper acidity. One is to add acid - usually citric acid - this is the "30-minute" method. As Sailor has said, using this method, your acidity is controlled entirely by the amount of acid added; it won't become any more (or any less) acidic with time. So if the measurements are off -- and that can be caused by changes in the milk; milk does not all start at the same pH, and different types of milk can have more or less of a buffering action -- then you won't get a workable result.
The second method is to add a lactic-acid producing culture, specifically Streptococcus thermophilus (ST), which is the primary bacteria involved in yogurt - so yes, you can use the yogurt DS culture, or you can just use some yogurt from the store which contains live cultures, or you can get the basic ST culture. You indicate that you've been trying the cultured approach, so I assume you're using one or another of these? Some people do a hybrid, using some citric acid AND some culture - but I think most people just use one or the other.
If you are using citric acid, you are correct that you should add it (diluted in 1/4 cup or so of non-chlorinated water) while the milk is cold, then heat it. If you are adding culture, normally you will heat the milk to the target point first, and then add the culture and let it ripen for a bit. Either way, be sure to heat gently and evenly to reach the target temp, and then remove the heat before adding the rennet. The milk will hold the target temp, or close to it, for quite a while. Add your rennet, stir for no more than 1 minute (in my opinion, 5 minutes is WAY too long, and 30 seconds is sufficient), and leave it still for the time required to get a clean break. Do NOT add any heat during this time - that will disrupt the action of the rennet. Cut your curd, allow it to rest for 5 minutes, then gently stir. Only then should you add any additional heat required, again gently and evenly. Many people use a water bath around the cheese pot to help even out the addition of heat.
Once the curd has been cooked/stirred to the proper texture, you drain it. If you are using citric acid, you are ready to try stretching - as noted, your acid level is already established. But if you are using culture, the acidity is still developing as the culture works on the curd. And here's where recipes based on time can by WILDLY wrong - how fast the acid develops will depend on the milk, the temperature, the specific cultures, and maybe even the phase of the moon. In my experience, the recipes allow way too much time for this (IOW, the acidity develops much faster than they seem to expect). You have to keep checking it to catch it at the right pH. Without a pH meter, this means trying a little bit of the curd every so often to see if it is ready to stretch.
2% milk is no less homogenized than whole milk; it just has less fat overall. If you are using store-bought, pasteurized and homogenized milk, you will need to experiment to see which brand(s) work the best, avoiding anything that is ultra-pasteurized (which often includes "organic" milk). Yes, go ahead and add the CaCl - I add it before adding cultures; others add it after cultures / ripening, but before rennet; I've tried it both ways and can't tell any difference.
A great book for understanding what is happening with the milk and the variables that go into making cheese is
Mastering Artisan Cheesemaking by Gianaclis Caldwell - highly recommended.
Stay with it, and keep asking questions - this is a great place to get help ... and to commiserate over less-than-optimal results!