Unles you preffer doing a count(*) for each table which can be slow, I would suggest you keep using the index technic.
If you don't want have out of date info, you can run this command prior to running the query : sp_updatestats
This is also a good idea to put this in a periodic maintenance plan of the server.
This a the query I used to get that info :
Select O.Name, MAX(I.rowcnt) as 'RowCount' from dbo.SysIndexes I inner join dbo.SysObjects O on I.id = O.id and O.XType = 'U' where I.indid < 2 group by O.name