While it is possible to list all of the the ordinals at an address (or more specifically, in a UTXO), it might not be practical because each time a range of ordinals is involved in a transaction, the range may be split in several places.
At the extreme, an address with 1 BTC could contain 100,000,000 distinct ranges of 1 sat each.
Likewise, though it may be possible to have a database with the location of each ordinal, it is not practical as the size of the database would be huge. It is more likely that Ordiscan just tracks the locations of specific ordinals, and just looks to see if any are at the address you supply. Finding the UTXO with a specific ordinal involves scanning the block chain for the chain of transactions involving the ordinal, starting at the originating block.
This shows how ordinals are created and transferred: