Your problem is the isolation level you are using. Unless you change it, SQL Server (and many other databases) operate in a mode that selects will block on uncommitted reads. You want to change SQL Server such that it uses MVCC instead (the default for Oracle; MySQL and SQL Server both have it too) and your problem will go away.
From SET TRANSACTION ISOLATION LEVEL (Transact-SQL):
READ COMMITTED
Specifies that statements cannot read
data that has been modified but not
committed by other transactions. This
prevents dirty reads. Data can be
changed by other transactions between
individual statements within the
current transaction, resulting in
nonrepeatable reads or phantom data.
This option is the SQL Server default.
The behavior of READ COMMITTED depends
on the setting of the
READ_COMMITTED_SNAPSHOT database
option:
- If READ_COMMITTED_SNAPSHOT is set to OFF (the default), the Database Engine
uses shared locks to prevent other
transactions from modifying rows while
the current transaction is running a
read operation. The shared locks also
block the statement from reading rows
modified by other transactions until
the other transaction is completed.
The shared lock type determines when
it will be released. Row locks are
released before the next row is
processed. Page locks are released
when the next page is read, and table
locks are released when the statement
finishes.
- If READ_COMMITTED_SNAPSHOT is set to ON, the Database Engine uses row
versioning to present each statement
with a transactionally consistent
snapshot of the data as it existed at
the start of the statement. Locks are
not used to protect the data from
updates by other transactions.
When the READ_COMMITTED_SNAPSHOT
database option is ON, you can use the
READCOMMITTEDLOCK table hint to
request shared locking instead of row
versioning for individual statements
in transactions running at the READ
COMMITTED isolation level.
(emphasis added)
Change your database configuration to turn READ_COMMITTED_SNAPSHOT to ON.
Also, try to keep your transactions as short-lived as possible and make sure you are committing the transaction in your background process (that's doing the 10,000 inserts an hour) because if it never commits then selects will block forever (on default settings).