Does mySQL have UNION? If so you can do this:
$sql = qq/ SELECT DISTINCT min(escore) as escore, org_id
FROM blast, protein
WHERE EXISTS ( SELECT id2, escore, org_id2
FROM blast, protein
WHERE id1 = id
AND text_id = ?
UNION
SELECT id1, escore, org_id1
FROM blast, protein
WHERE id2 = id
AND text_id = ? )
GROUP BY org_id
/;
UNION in T-SQL gets rid of duplicate rows for you. So if UNION works the same way in mySQL then you reduce the overhead of making multiple queries and you won't need a temp table.
Update: Updated the query to include the DISTINCT and GROUP BY.