I believe there is a faster way than what has already been given, but first, Joshua's Cases method can be made a little faster by using /; rather than & for the test.
This is the solution I propose (edit: adding white space for clarity, since the double brackets do not format here):
dat[[
Position[
dat[[All, 2]],
x_ /; x >= 100,
1, 1
][[1, 1]],
1
]]
Here are timings for the various methods offered. Please note that the /. method is only being run once, while the others are being run loops times. Therefore, in this first test it is 100x slower than the Position method. Also, the NestWhile method is only returning an index, rather than an actual first column element.
In[]:=
dat = {Range[5000], Sort@RandomInteger[1*^6, 5000]} // Transpose;
lim = 300000; loops = 100;
dat /. {___, {x_, _?(# >= lim &)}, ___} :> x; // Timing
Do[ Cases[dat, {_, _?(# >= lim &)}, 1, 1][[1, 1]] , {loops}] // Timing
Do[ Cases[dat, {_, y_ /; y >= lim}, 1, 1][[1, 1]] , {loops}] // Timing
Do[ Select[dat, #[[2]] >= lim &, 1][[1, 1]] , {loops}] // Timing
Do[ NestWhile[# + 1 &, 1, dat[[#, 2]] < lim &] , {loops}] // Timing
Do[ dat[[Position[dat[[All, 2]], x_ /; x >= lim, 1, 1][[1, 1]], 1]] , {loops}] // Timing
Out[]= {0.125, Null}
Out[]= {0.438, Null}
Out[]= {0.406, Null}
Out[]= {0.469, Null}
Out[]= {0.281, Null}
Out[]= {0.125, Null}
With a longer table (I leave out the slow method):
In[]:=
dat = {Range[35000], Sort@RandomInteger[1*^6, 35000]} // Transpose;
lim = 300000; loops = 25;
Do[ Cases[dat, {_, _?(# >= lim &)}, 1, 1][[1, 1]] , {loops}] // Timing
Do[ Cases[dat, {_, y_ /; y >= lim}, 1, 1][[1, 1]] , {loops}] // Timing
Do[ Select[dat, #[[2]] >= lim &, 1][[1, 1]] , {loops}] // Timing
Do[ NestWhile[# + 1 &, 1, dat[[#, 2]] < lim &] , {loops}] // Timing
Do[ dat[[Position[dat[[All, 2]], x_ /; x >= lim, 1, 1][[1, 1]], 1]] , {loops}] // Timing
Out[]= {0.734, Null}
Out[]= {0.641, Null}
Out[]= {0.734, Null}
Out[]= {0.5, Null}
Out[]= {0.266, Null}
Finally, confirmation of agreement:
In[]:= SameQ[
Select[dat, #[[2]] >= lim &, 1][[1, 1]],
dat[[Position[dat[[All, 2]], x_ /; x >= lim, 1, 1][[1, 1]], 1]]
]
Out[]= True