Magento shouldn't be run on anything other than bare metal, certainly never in a VPS.
In terms of sizing your RAM requirements, assuming 4 cores, you'll need at least 8GB RAM to maintain the recommended 2GB/core ratio.
With a catalogue size of 350k SKUs, I'd assume around ~15GB of total table space. You can get a definitive answer using the following query,
SELECT
IFNULL(B.engine,'Total') "Storage Engine", CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM (SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,SUM(data_length+index_length) TSize
FROM information_schema.tables
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')
AND engine IS NOT NULL
GROUP BY engine
WITH ROLLUP) B,(SELECT 3 pw) A
ORDER BY TSize;
Your DB server needs around twice the total amount of table space available in RAM to properly perform. Add in the other roles/requirements of your server (web/mail/logging etc.) - I'd say you would be looking at ~32GB RAM for static load (ie. no visitors).
You would need to increase CPU/RAM proportionately with your traffic levels.
In any case. Drop the VPS, its a totally inappropriate choice for a Magento store.
Sources:
Whenever I have problems with indexing from the admin panel I try indexing using SSH.
So if you have SSH-Access please use the following codes:
reindex all indexes
php -f /shell/indexer.php reindexall
reindex specific index
example:
php indexer.php --reindex catalog_product_attribute
catalog_product_attribute Product Attributes
catalog_product_price Product Prices
catalog_url Catalog Url Rewrites
catalog_product_flat Product Flat Data
catalog_category_flat Category Flat Data
catalog_category_product Category Product
catalogsearch_fulltext Catalog Search Index
cataloginventory_stock Stock status
Best Answer
Reading about error code 28, that may be not enough space left on disc.
https://forums.mysql.com/read.php?20,639001,639001