Another possibility when trying to find the $k$-th root of a function would be to adapt the NDSolve[]-based event detection strategy by Daniel given in this answer; that is, keep a running count as each zero is crossed, and then bail when you've hit the one you wanted. For instance:
f[x_] := x BesselJ[1, x] - 2 BesselJ[0, x] k = 0; j = 1005; (* index of zero *) sol = Reap[NDSolve[{y'[x] == f'[x], y[0] == f[0], WhenEvent[y[x] == 0, k++; If[k == j, Sow[x]; "StopIntegration"], "DetectionMethod" -> "Interpolation", "IntegrateEvent" -> True, "LocationMethod" -> "Brent"]}, {}, {x, 0, ∞}, AccuracyGoal -> ∞, WorkingPrecision -> 20];][[-1, 1, 1]]
which yields
3154.9449374317543982
You can polish further with FindRoot[] if wanted:
sol = \[FormalX] /. First[FindRoot[f[\[FormalX]], {\[FormalX], sol}, WorkingPrecision -> 20]] 3154.9449374319666351
If you wish for an entire range (say, the 26th to the 30th zeros), the event inside WhenEvent[] is easily modified:
k = 0; {kmin, kmax} = {26, 30} Reap[NDSolve[{y'[x] == D[f[x], x], y[0] == f[0], WhenEvent[y[x] == 0, k++; If[kmin <= k <= kmax, Sow[x], If[30 < k, StopIntegration"]], "DetectionMethod" -> "Interpolation", "IntegrateEvent" -> True, "LocationMethod" -> "Brent"]}, {}, {x, 0, ∞}, AccuracyGoal -> ∞, WorkingPrecision -> 20];][[-1, 1]] {79.345692016011214192, 82.486505133453918880, 85.627375391257917317, 88.768296740115704530, 91.909263963793310359}
and again one can post-process with FindRoot[] if need be.