INDEX + MATCH: the flexible lookup
Put MATCH inside INDEX: MATCH finds the row number, and INDEX returns the value at that row from whichever column you choose.
=INDEX(return_range, MATCH(search_key, lookup_range, 0))
Because the return range and lookup range are separate, you can look left, right, up or down. Inserting a column won't break the formula, unlike VLOOKUP's hard-coded column number.
Two-way lookup
Use one MATCH for the row and another for the column:
=INDEX(B2:E7, MATCH(G2, A2:A7, 0), MATCH(H2, B1:E1, 0))