array [mid:] создает новую под-копию каждый раз, когда вы вызываете ее = медленно. Также вы используете рекурсию, которая в Python тоже медленная.
Попробуйте следующее:
def binarysearch(sequence, value):
lo, hi = 0, len(sequence) - 1
while lo <= hi:
mid = (lo + hi) // 2
if sequence[mid] < value:
lo = mid + 1
elif value < sequence[mid]:
hi = mid - 1
else:
return mid
return None