in general, since different databases implement SQL differently, it would help to know what database you're using.
anyway, i think UNION is what you want, if your product supports it. you could write something like:
select a.coname, a.descrip
from companies a
where a.coname like '%$w1 $w2%'
and a.descrip like '%$w1 $w2%'
UNION
select b.coname, b.descrip
from companies b
where (b.coname like '%$w1' or b.coname like '$w2%')
and (b.descrip like '%$w1' or b.descip like '$w2%')
UNION
select c.coname, b.descrip
from companies c
where (b.coname like '%$w1' or b.coname like '$w2%')
or (b.descrip like '%$w1' or b.descip like '$w2%')
the and/or logic might not be quite right there, but you get the picture.
if your product doesn't support UNION (e.g. mySQL), then you can use a temporary working table to build up the union set you desire. E.g., something like:
create table tmpwrkr (coname char(5), descrip char(50)...);
insert into tmpwrkr
select a.coname, a.descrip
from companies a
where a.coname like '%$w1 $w2%'
and a.descrip like '%$w1 $w2%';
insert into tmpwrkr
select b.coname, b.descrip
from companies b
where (b.coname like '%$w1' or b.coname like '$w2%')
and (b.descrip like '%$w1' or b.descip like '$w2%')
...
then, select t.coname, t.descrip
from tmpwrkr;