Assuming you have the frequency and db vectors, you can find the intersection of your required line and back out its location on the plot. Once you do that, you can annotate your graph.
As an (oversimplified) example:
xoffset = a; yoffset = b;
[~,xi,~] = intersect(dB,3);
y(1:numel(freq)) = 3;
figure;loglog(freq,dB,freq,y);
text((freq(xi) + xoffset),(dB(xi) + yoffset),[num2str(freq(xi)) 'Hz'];
Where a and b are arbitrary constants to offset your text from the point so you can read it, might take a little fiddling to figure out. xi is the index for column where your magnitude equals 3dB, and this allows you to find the frequency.
The above is simplified to assume only one intersection. If there are multiple intersection points, a few lines of logic will need to be added to account for this, but the above is generic enough that it wouldn't take too much effort.
It also assumes that you have a data point in your dB vector with a magnitude exactly equal to 3 dB, which I'm guessing doesn't generally happen, but it would be pretty simple to search for an intersection using some specified tolerance.
The above is a generic example that I hope should help you tailor a script that suits your needs. It's probably not the most elegant solution because I'm not really an elegant coder, but I hope it helps set you in the right direction.