Are you sure this is the query you want? You do know that the first OR condition does not even have a join defined so it will do a cartesian join on all the tables. I'm not sure if that's by design and you don't expect the join criteria to be met for that OR condition. Because it looks like your multi-table select columns suggest that you are expecting some sort of join and if that's the case you should start out with a query that looks like this..
SELECT a.id,
a.filetype,
a.uploadtime,
a.filename,
a.userid,
a.cid,
ui.username,
company.name companyname,
a.screenname
FROM tm_transactionlog a,
tm_userinfo ui,
tm_company company,
tm_airlinecompany ac
WHERE a.userid = ui.id
AND a.cid = company.id
AND company.specificcid = ac.id
AND ( a.cid = 3049
OR ac.servicecid = 3049
OR ui.cid = 3049 );
And as far as optimizing this query, I think there is very little optimization you can do without changing your data model. If you already don't have indexes, I would suggest creating a composite index on (a.userid,a.cid <- the column with the higher cardinality should go first), and indexes on ac.cservicecid,company.specificcid & ui.cid.