Ezreal is naturally strong because his high mobility and burst lets him leap in and trade reasonably well with most heroes. His weakness, however, is that he's exceptionally squishey and shorter range, rendering him weak to burst and enemy poke compared to most other heroes.
This leaves 2 forms of counterplay against an ezreal.
- Exploit his early squishiness. Using lanes that involve supports like: taric, leona and alistar and AD carries such as: Urgot, Graves, and Corki really lets you abuse him before he gets extreme mobility or extreme burst.
Avoid using blitz to do this. While he is strong and aggressive, the interaction between arcane shift and blitz hook favors ezreal to the point where he can shift almost after the pull and still get out.
2 2. Exploit his short range. This is a little trickier because ezreal's e lets him close gaps well, but doing so puts him under heavy risk from jungler presence. This means that getting an AD carry who gets really fast range can place ezreal in a rough place.
The goal is to get a strong damage mitigation support such as: janna, soraka, or taric as well as a carry like kog' maw or urgot who can poke ezreal outside his auto range. It takes a lot of play around creeps and understanding of ranges, but generally (especially in the case of kog maw) generally outscales ezreal.
Tristana and caitlyn, however aren't good for this strat. Ezreal has a significantly stronger lanephase than Tristana, and because he can duck her early game burst, it renders her in a spot where she isn't really strong until LATE, lategame unless ezreal mistimes his arcane shifts. Caitlyn is overreliant on bush control, which while good on most heroes isn't good vs ezreal simply because his q range can outpoke her auto range.