When you hear people talk about "expensive" queries, they are usually referring to performance. Expensive = slow.
Usually, the slowest part of SQL server is interacting with the hard disk (reading or writing). Therefore, it is usually in your best interest to minimize this interaction (usually called I/O).
SQL Server stores data to disk using 8KB at a time. When you have a table that is narrow (just a few columns), you will get multiple rows of data per 8kb page. When you have a wide table, with a lot of columns, you will get less rows (maybe even just one). Because of the performance with I/O, it's best to get as many rows per data page as possible.
Now... If you split your horrendously wide table in to narrow tables, it COULD give you better performance as well as REDUCING the size of the database.
Performance
I have no doubt that there is likely to be several queries that use all of the columns. However, you will probably have other queries that only use some of the columns. If you split your monster table in to smaller tables, the queries that use all of the columns will probably not get slower, but the queries that only use some of the columns are likely to get faster.
Database Size
Your database size will depend on a lot of things, and it is possible that the database will get smaller. It's not likely to get smaller, but it is possible. Remember earlier when I said that SQL Server stores data in 8KB pages to the disk? SQL server will not split data in a single row across multiple pages. Suppose your 501 columns requires 4.01 kb to store. SQL Server will not be able to store 2 rows per page, so it will only store 1 row per page. This means that almost 1/2 of the storage space is wasted on nothing. There's almost always some wasted space in a database, but wide tables are likely to waste more space than narrow tables.
You said earlier that there are 300,000 columns. If your ID is an integer, which takes 4 bytes to store, duplicating this integer in multiple tables will only require 1.2 megabytes per extra table. If you split your table in to 20 smaller tables, this would require (at most) 30 megabytes of additional storage, which is practically nothing at all.
My suggestion
Split your monster table in to smaller tables, but group the data logically so that some of the queries you may have only need the data from 1 (or 2) smaller tables. For example, if you are storing data about people, you could put address information in one table, demographics (like date of birth) in another, and so on. This way, if you are writing a query that requires address, but not any demographics, you will be able to use just the smaller table.
Now... please understand that this is my suggestion. You should do what is right for you. My advice is based on my many years experience of working with SQL Server, as well as my in-depth knowledge of the database engine. Please take this for what it is, advice.
-George
Microsoft SQL Server MVP
My Blogs
SQLCop
twitter
"The great things about standards is that there are so many to choose from." - Fortune Cookie Wisdom