Table prefix is not the only solution , but you are right when saying that column names should be unique in your database! Our standard slightly differs than yours, where we use the table name as a suffix (see infra), but the result is the same: each column holds a unique name. And the most valuable argument for this unicity principle is with views and reporting: when joining multiple tables, you'll surely manipulate columns that have a similar signification, like 'description', 'observation', 'code', or 'number'. If, at this stage, your columns have the same name, you will have to rename them with aliases, making your views messy and difficult to understand and maintain.
Here are a few of our examples, where field name is built out of the nature of data (date, time, code, id) + the table description, making de facto each column's denomination unique:
Tbl_Attendance contains attendance data
id_Attendance is the identifier
id_Person is the foreign key to Tbl_person.id_Person
id_Zone is the foreign key to Tbl_Zone.id_Zone
dateAttendance is the attendance date
timeInAttendance is the check in time
timeOutAttendance is the check out time
Tbl_PaySlip contains informations about Payslips
id_Payslip is the identifier
id_Person is the foreign key to Tbl_person.id_Person
id_Company is the foreign key to Tbl_Company.id_Company
dateStartPayslip is the starting date of the payslip
dateEndPayslip is the ending date of the payslip
codePayslip is the unique code of the payslip, built out from company code, person code, period code