It is the assumption of an FG of 1.014 that is incorrect. I think it would be impossible to get that low with those ingredients. 14 is almost 25% of 52, so the dumb calculator is just applying a factor to the OG with no adjustment for the ingredients. Lets break it down:
Half lb of lactose in 2.5 gallons is equivalent of .007. It is unfermentable, so will be reflected in both the OG and FG. If we remove it, we would now have 1.045 fermenting down to 1.007 (or 85% attenuation of the other ingredients - not going to happen).
Next: Dark extract (I assume LME). This is only 75% fermentable (at best) by most yeasts. 3 lbs will contribute 42 points in 2.5 gallons, and when fermented would leave around .011.
So with just the lactose and the LME, without the grains, you would have gotten a beer with an OG of 1.049 which many decent yeasts could ferment down to 1.018. Higher attenuating yeasts like 3711 would ferment more of the LME, while less attenuating yeasts like Windsor would ferment less. 1.018 is a 'ball-park' average.
Now you have grains in there too, which will increase both the FG and OG. Looks like you only got .003 from the grains, so you only steeped them, rather than mashed them. You have .5 lbs of 2-row which means you could have mashed the grains. If you had mashed them, I would have expected the gravity contribution to have been roughly .010 or more. .003 is roughly the unfermentable contribution of the crystal and Barley, so I'm assuming you only steeped. 1.018 + .003 (grain unfermentables) = 1.021.
If you had mashed and gotten the extra fermentables, that would also further increase the FG.
The 1.021 is only a rough estimate, and is probably the best you could do. It could go higher depending on yeast used, aeration, pitch rate, etc. Some yeasts could take it lower, but they are high attenuating yeasts, and would have a lot of flavor contribution themselves which probably would not go in a Milk Stout.
You are probably done at 1.026.