When you have multiple tables in your query, you should use an alias for each table and use that alias as a prefix when referring to the columns. Otherwise the database does not know to which column you're referring to if a column with the same name exists in multiple tables.
Try the following:
$sql = "select
s1.id as id,
s1.name as name,
s2.name as department_id,
s1.course_desc as course_desc,
s3.name as hidden_id
from
course as s1
left join department as s2
on s1.department_id=s2.id
left join hidden as s3
on s1.hidden_id=s3.id
WHERE CONCAT(`s1.id`, `s1.name`, `s1.department_id`, `s1.course_desc`,`s1.hidden_id`)
LIKE '%".$valueToSearch."%'
LIMIT $start_from, $per_page";