Dipende da come sono ordinati i dati nell'array. Se sono disordinati non credo puoi fare altro che cercare in ogni elemento.
L'array che tu metti nel tuo esempio è già ordinato. In quel caso si procede con ricerca dicotomica, ovvero parti da metà dell'array.
Se l'array è disordinato, nel tuo caso che vuoi fare una ricerca entro intervallo potresti spezzare l'if in due, solo se il valore è nel range per uno dei confronti allora verifichi anche l'altro estremo.
Sempre che il compilatore non abbia già ottimizzato quel if unico.
for (i=0; i<10; i++)
{ if (Valore_Ricercato > MyArray[ i ])
if( Valore_Ricercato < MyArray[ i + 1 ] )
{ Val_Ricercato_inf = MyArray[ i ];
}
}