How to design database tables using normalization in better manner in SQL?
The table structure that your colleagues have suggested might be appropriate for a data warehouse, but it would typically not reduce I/O in an OLTP database.

Consider this--if you run a query for all of the customers in a city that returns 1,000 rows, with the denormalized table, the database engine will have to read the CityName, StateName, and CountryName 1,000 times.  Fewer rows will fit on a database page, so it will end up reading more pages to fulfill the query.

With normalized tables, it will only have to read the IDs for those columns (which is very small compared to text fields), and read the actual CityName, StateName, and CountryName only once.  More rows will fit on a database page, so fewer pages will need to be read to fulfill the query.

Additionally, think what the denormalized table does to the buffer.  If there are 1,000 customer records in the buffer, then the city, state, and country names are also in the buffer 1,000 times.  With normalized tables, those names are only in the buffer one time, using much less space.  So you'll have more data in buffer with normalized tables.