I've been thinking about the Bayesian approach, but I believe now that it may end up being more theoretical or academic than intended in this very particular instance.
I wonder if what you are after (and I realize that I am working around some of the more specific questions at the end of your post) is to set up some statistical power calculations. You can do this with R, or online stats calculators, but the important concept is the flexibility in generating results that tell you in what percentage of cases you can expect to correctly call the coin biased depending on: 1. The number of tosses; 2. The degree of bias in the coin; and 3. The percentage of cases we are ready to accept as the risk of actually calling the coin biased when it is not (risk alpha).
Knowing that even with a fair coin you can get extremely surprising results, you can settle for a compromise that you will only call the coin "biased" if it goes beyond a threshold that guarantees you are going to make a mistake in only $\small 5\%$ of the times when the coin is in fact unbiased (risk alpha).
But you want to know what is in some respects a complementary idea: If the coin is biased, in what percentage of cases will you be able to make the call under the self-imposed constraints in the prior paragraph? In other words, the power. I have some notes in here if you are interested.
Evidently, your power to confidently reject the coin fairness will increase (will make itself more easily manifest) as you increase the number of tosses, or if you happen to be dealing with more extremely biased coins.
I am not going to re-invent the wheel by reformulating what is a very straightforward chunk of code that you can find in many guises, for example in this Berkeley University post, and that I'm pasting for ease of access:
set.seed(17) # Today's date.
coin.power = function(ntoss=100,nsim=1000,prob=.5){
lower = qbinom(.025,ntoss,.5)
upper = qbinom(.975,ntoss,.5)
rr = rbinom(nsim,ntoss,prob)
sum(rr < lower | rr > upper) / nsim
}
ntosses = c(10,100,200,500,600,800,1000,1500,2000,2500)
res = sapply(ntosses, coin.power, prob=.55)
names(res) = ntosses
res
10 100 200 500 600 800 1000 1500 2000 2500
0.032 0.133 0.259 0.634 0.653 0.799 0.867 0.969 0.994 0.999
In the case of a coin with a true biased probability of heads of $\small P(H)=55\%$, then, you can expect to reject correctly the hypothesis that the coin is fair $\small 99.4\%$ of the times if you toss the coin $\small 2,000$ times, and $\small 96.9\%$ of the times with $\small 1,500$ tosses.
If the coin is more biased, for example, $\small P(H)=70\%$, you can expect virtual certainty with $\small 200$ tosses:
res = sapply(ntosses,coin.power,prob=.70)
names(res) = ntosses
res
10 100 200 500 600 800 1000 1500 2000 2500
0.163 0.976 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000