När du har både LIMIT och ORDER BY, har optimeraren bestämt att det är snabbare att halta genom de ofiltrerade posterna på foo genom att sjunka ner tills den får fem matchningar för resten av kriterierna. I de andra fallen kör den helt enkelt frågan som en kapslad loop och returnerar alla poster.
Omedelbart skulle jag säga att problemet är att PG inte grokar joint distribution av de olika id:n och det är därför planen är så suboptimal.
För möjliga lösningar:Jag antar att du har kört ANALYSE nyligen. Om inte, gör det. Det kan förklara varför dina beräknade tider är höga även på versionen som återkommer snabbt. Om problemet kvarstår, kanske kör ORDER BY som ett underval och slå LIMIT på i en yttre fråga.