Creo que la logica que usas esta fallando por ese motivo es que si pones or y uno de los campos esta vacio tonces tu condicion quedaria LIKE "%" y eso hace que te muestre todo, tal vez puedes intentar hacer algo asi:
Código PHP:
//
$sql = "SELECT razonsocial, ruc, direccion, distrito, telefono, fax, email, website , giro, imagen FROM empresa WHERE ";
$condicion=""
if (isset($_POST['empresa']))
{
$empresa=$_POST['empresa'];
$condicion=($condicion=="")?" razonsocial LIKE '$empresa%' ": " OR razonsocial LIKE '$empresa%' ";
}
if (isset($_POST['giro']))
{
$giro = $_POST['giro']
$condicion=($condicion=="")?" giro LIKE '$giro%' ": " OR giro LIKE '$giro%' ";
}
if (isset($_POST['distrito']))
{
$distrito = $_POST['distrito']
$condicion=($condicion=="")?" distrito LIKE '$distrito%' ": " OR distrito LIKE '$distrito%' ";
}
$sql = $sql.$condicion;
es una idea basica puedes adaptarla, mejorarla, cya